Hello all - I've written a new module called RTMP::Client that I'm planning to put on CPAN.
Take a look at the documentation and tell me what you think. thank you for your time. NAME RTMP::Client - Very Simle RTMP client SYNOPSIS use RTMP::Client qw(rtmp_connect rtmp_play rtmp_call); print "connect success\n" if rtmp_connect('192.168.1.1', '1935', 'live/23'); rtmp_play('MainB_1', '-1.0', '-1.0'); rtmp_call('YourFunc', 'YourARGV'); DESCRIPTION This is a simple RTMP client without video or audio decode. It implemented in pure PERL including packing Adobe amf packages. METHODS rtmp_connect($rtmp_server_address, $server_port, $application_name) Just like the 'NetConnection.connect()' function in ActionScript, with args are set in different way. rtmp_play($stream_or_file_name, $play_type, $length, $interval_call_hook_function, $hook_function) Just like the 'NetStream.play()' function in ActionScript, with args are set in different way. You can use the last two args or not. rtmp_call($stream_or_file_name, $play_type, $length, $file_path_to_store_the_data_received) Just like the 'NetStream.call()' function in ActionScript, with args are set in different way. SOME INTERNAL METHODS rtmp_handshake() No args need. Called in function rtmp_connect(). pack_amf_body_to_chunks($string, $object_id, $stream_id, $type) Output a available binary amf packet. Works on amf message body, just like add a right amf header before the message body. pack_amf_object_start() pack_amf_object_end() pack_amf_attribute_name($string) It packs a attribute_name which less than 65536 bytes or return null. pack_amf_number($double) Return 9 bytes binary data. pack_amf_boolean($boolean) Return 2 bytes binary data. pack_amf_string($string) it can pack a string which less than 65536 bytes or it return null. There will be a long string packer in future. pack_amf_boolean($boolean) Return 1 byte binary data. my_recv_a_chunk() Recieve a rtmp chunk. my_recv_a_msg() Recieve a rtmp message. my_recv_nostop(\&sub) Wait until recieved bytes, then return it. my_recv($int_wanted_length, $int_time_out) Wait $int_time_out Seconds, or Recieve $int_wanted_length bytes, then return it. my_send_bin($binary_data) Send binary data to server. my_send_hex(@array_with_hex) Convert hex array to binary ,then send them to server. print_hex($binary_data) Print binary data in a readable format. rtmp_timer($int_chunk_id) Return rtmp timestamp of the chunk stream id in string format. From Adobe RTMP Spec: 1.Timestamps in RTMP Chunk Stream are given as an integer number of milliseconds. 2.each Chunk Stream will start with a timestamp of 0, but this is not required. 3.Timestamps MUST be monotonically increasing, and SHOULD be linear in time. reset_rtmp_timer($chunk_id) reset_rtmp_timer($chunk_id, $chunk_message_length) get_rtmp_chunk_msg_length($chunk_id) set_rtmp_chunk_msg_type_id($chunk_id, $chunk_message_type_id) get_rtmp_chunk_msg_type_id($chunk_id) set_rtmp_chunk_msg_stream_id($chunk_id, $chunk_message_stream_id) get_rtmp_chunk_msg_stream_id($chunk_id) set_rtmp_client_chunk_size($new_chunk_size) get_rtmp_client_chunk_size reset_rtmp_msg($chunk_id) put_rtmp_msg($chunk_id, $string) get_rtmp_msg set_rtmp_window($window_size, $limit_type) get_rtmp_window() set_rtmp_peer_window($window_size) get_rtmp_peer_window() dec($binary_data) Dump the data to dec dec($string, $indent, $front_color, $back_color) print colorful strings analysis_rtmp_msg($msg_type, $msg) output the rtmp stream information to STDOUT EXAMPLES use RTMP::Client qw(rtmp_connect rtmp_play rtmp_call); Speed Detection report download speed every 5 secs. print "connect success\n" if rtmp_connect('192.168.1.1', '1935', 'live/23'); my $report_time = 5; rtmp_play('MainB_1', '-1.0', '-1.0', $report_time, \&speed_detector); sub speed_detector { my $rev_length = shift; my $speed = $rev_length / 1024 / $report_time; if ($speed > 3) { my $cur_time = strftime("%F_%T", localtime); print $cur_time, "\t", $speed, "\tKbytes/s\n"; } else { print "too slow !\n"; } } Save to File do things like "rtmpdump".<http://rtmpdump.mplayerhq.hu/> print "connect success\n" if rtmp_connect('192.168.1.1', '1935', 'live/23'); my $loop_time = 10; rtmp_play('MainB_1', '-1.0', '-1.0', $report_time, \&save_to_file); sub save_to_file { my $rev_length = shift; my $rev_binary = shift; open my $fh,">>","/root/rtmp_dump.bin"; binmode $fh; print $fh $rev_binary; close $fh; } AUTHOR Written by ChenGang, yikuyiku....@gmail.com COPYRIGHT Copyright (c) 2011 ChenGang. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.