Penerima dapat sebuah terminal akhir sepertin PC Client dengan player VLC, Smartphone dengan player MX-Player, atau Streaming Server spt Wowza (edge server, atau CDN server).
Karena bersifat broadcast, streaming perlu diangkut pakai Transport Stream TS.
Paket-paket TS diangkut dapat menggunakan UDP atau RTP
UDP: [ TS --> UDP --> IP ]
RTP: [ TS --> RTP --> UDP --> IP ] <-- dibahas pada bagian khusus
Destination Multicast (banyak penerima)
ffmpeg.exe -i VIDEO.flv -vcodec libx264 -acodec libvo_aacenc -f mpegts udp://239.101.101.1:1234 |
Jika router (Wifi AP) memblok multicast, maka bisa dicoba streaming UDP ke IP Unicast
Destination Unicast (1 penerima)
(PC / Smartphone penerima IPnya 192.168.1.104):
ffmpeg.exe -i VIDEO.flv -vcodec libx264 -acodec libvo_aacenc -f mpegts udp://192.168.1.104:1234 |
Apabila disisi penerima (player) tidak bisa buffering (atau simpan ke file), maka Streamer harus mensimulasikan pengiriman secara live: tambahkan option -re
Live Simlated Streaming
ffmpeg.exe -re -i VIDEO.flv -vcodec libx264 -acodec libvo_aacenc -f mpegts udp://192.168.1.104:1234 |
Terkadang sering didapat bahwa player disisi client play video berwarna hijau. Ini terjadi karena file video memiliki i-Frame (KeyFrame) biasanya setiap 10 detik. Artinya setiap 10 detik barulah player mendapatkan i-Frame (gambar utuh).
Agar player tidak harus menunggu 10 detik agar sync kembali (karena dapat frame/gambar utuh), maka berikut adalah command untuk memaksa ffmpeg melakukan transcoding dengan meng-insert i-Frame tiap 3 detik (tapi efeknya kebutuhan bandwidth meningkat, karena ada tambahan 2 frame tiap 10 detik).
Force to Create KeyFrame tiap 3 detik
ffmpeg.exe -re -i VIDEO.flv -vcodec libx264 -acodec libvo_aacenc -force_key_frames "expr:gte(t,n_forced*3)" -f mpegts udp://192.168.1.104:1234 |
Frame | Time in Seconds ( t ) |
Expression, based on gte(t,n_forced*3) |
Evaluates as | Keyframes forced so far ( n_forced ) |
---|---|---|---|---|
1 | 0 | If 0 >= 0*3 | TRUE – force keyframe | 1 |
2 | 0 | If 0 >= 1*3 | FALSE | 1 |
3 | 1 | If 1 >= 1*3 | FALSE | 1 |
4 | 1 | If 1 >= 1*3 | FALSE | 1 |
5 | 2 | If 2 >= 1*3 | FALSE | 1 |
6 | 2 | If 2 >= 1*3 | FALSE | 1 |
7 | 3 | If 3 >= 1*3 | TRUE – force keyframe | 2 |
8 | 3 | If 3 >= 2*3 | FALSE | 2 |
9 | 4 | If 4 >= 2*3 | FALSE | 2 |
10 | 4 | If 4 >= 2*3 | FALSE | 2 |
11 | 5 | If 5 >= 2*3 | FALSE | 2 |
12 | 5 | If 5 > 2*3 | FALSE | 2 |
13 | 6 | If 6 >= 2*3 | TRUE – force keyframe | 3 |
14 | 6 | If 6 >= 3*3 | FALSE | 3 |
15 | 7 | If 7 >= 3*3 | FALSE | 3 |
16 | 7 | If 7 >= 3*3 | FALSE | 3 |
17 | 8 | If 8 >= 3*3 | FALSE | 3 |
18 | 8 | If 8 >= 3*3 | FALSE | 3 |
19 | 9 | If 9 >= 3*3 | TRUE – force keyframe | 4 |
FFMPEG transmit ke DVB-T Endocer
ffmpeg -re -i [source] -vcodec mpeg2video -s 720x576 -r 25 -flags cgop+ilme -sc_threshold 1000000000 -b:v 2M -minrate:v 2M -maxrate:v 2M -bufsize:v 1.4M -acodec mp2 -ac 2 -b:a 192k -f mpegts udp://239.253.253.4:1234?pkt_size=1316
No comments:
Post a Comment