@ -28,6 +28,7 @@
main ( Args ) - >
DefaultOpts = [ { format , state } ,
{ ssrc , 16#11223344 } ,
{ rate , 8000 } ,
{ pt , 98 } ] ,
{ PosArgs , Opts } = getopts_checked ( Args , DefaultOpts ) ,
log ( debug , fun ( Dev ) - >
@ -144,7 +145,8 @@ show_help() ->
" Options: ~n " ++
" -h, --help this text ~n " ++
" --version show version info ~n " ++
" -i, --file=FILE reads payload from state file ~n " ++
" -i, --file=FILE reads payload from file (state format by default) ~n " ++
" -f, --frame-size=N read payload as binary frames of size N instead ~n " ++
" -p, --payload=HEX set constant payload ~n " ++
" --verbose=N set verbosity ~n " ++
" -v increase verbosity ~n " ++
@ -153,6 +155,8 @@ show_help() ->
" --format=carray use a C array for output ~n " ++
" -s, --ssrc=SSRC set the SSRC ~n " ++
" -t, --type=N set the payload type ~n " ++
" -r, --rate=N set the RTP rate [8000] ~n " ++
" -D, --duration=N set the packet duration in RTP time units [160] ~n " ++
" -d, --delay=FLOAT add offset to playout timestamp ~n " ++
" ~n " ++
" Arguments: ~n " ++
@ -165,6 +169,21 @@ getopts([ "--file=" ++ File | R], Opts) ->
getopts ( R , [ { file , File } | Opts ] ) ;
getopts ( [ " -i " ++ T | R ] , Opts ) - >
getopts_alias_arg ( " --file " , T , R , Opts ) ;
getopts ( [ " --frame-size= " ++ N | R ] , Opts ) - >
Size = list_to_integer ( N ) ,
getopts ( R , [ { frame_size , Size } , { in_format , bin } | Opts ] ) ;
getopts ( [ " -f " ++ T | R ] , Opts ) - >
getopts_alias_arg ( " --frame-size " , T , R , Opts ) ;
getopts ( [ " --duration= " ++ N | R ] , Opts ) - >
Duration = list_to_integer ( N ) ,
getopts ( R , [ { duration , Duration } | Opts ] ) ;
getopts ( [ " -D " ++ T | R ] , Opts ) - >
getopts_alias_arg ( " --duration " , T , R , Opts ) ;
getopts ( [ " --rate= " ++ N | R ] , Opts ) - >
Rate = list_to_integer ( N ) ,
getopts ( R , [ { rate , Rate } | Opts ] ) ;
getopts ( [ " -r " ++ T | R ] , Opts ) - >
getopts_alias_arg ( " --rate " , T , R , Opts ) ;
getopts ( [ " --version " | _ ] , _ Opts ) - >
show_version ( ) ,
halt ( 0 ) ;
@ -328,9 +347,10 @@ write_packets(Dev, DataSource, P = #rtp_packet{}, F, L, O, Opts) ->
Format = proplists : get_value ( format , Opts , state ) ,
Ptime = proplists : get_value ( duration , Opts , 160 ) ,
Delay = proplists : get_value ( delay , Opts , 0 ) ,
Rate = proplists : get_value ( rate , Opts , 8000 ) ,
case next_payload ( DataSource ) of
{ Payload , DataSource2 } - >
write_packet ( Dev , 0 . 020 * F + Delay ,
write_packet ( Dev , Ptime * F / Rate + Delay ,
P #rtp_packet { seqno = F , timestamp = F * Ptime + O ,
payload = Payload } ,
Format ) ,
@ -376,12 +396,18 @@ read_packets(Dev, Opts) ->
read_packets ( Dev , Opts , Format ) .
read_packets ( Dev , Opts , Format ) - >
case read_packet ( Dev , Format ) of
case read_packet ( Dev , Opts , Format ) of
eof - > [ ] ;
Tuple - > [ Tuple | read_packets ( Dev , Opts , Format ) ]
end .
read_packet ( Dev , Format ) - >
read_packet ( Dev , Opts , bin ) - >
Size = proplists : get_value ( frame_size , Opts ) ,
case file : read ( Dev , Size ) of
{ ok , Data } - > { 0 , #rtp_packet { payload = iolist_to_binary ( Data ) } } ;
eof - > eof
end ;
read_packet ( Dev , _ Opts , Format ) - >
case read_packet_line ( Dev , Format ) of
{ Time , Bin } - > { Time , parse_rtp_packet ( Bin ) } ;
eof - > eof