NAME
RTMP::Client - A Simple RTMP client
SYNOPSIS
"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.
EXAMPLES
Speed Detection
report download speed every 5 secs.
"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
);
$cur_time
,
"\t"
,
$speed
,
"\tKbytes/s\n"
;
}
else
{
"too slow !\n"
;
}
}
Save to File
do things like "rtmpdump".http://rtmpdump.mplayerhq.hu/
"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
;
$fh
$rev_binary
;
close
$fh
;
}
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
AUTHOR
Written by ChenGang, yikuyiku.com@gmail.com http://blog.yikuyiku.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.