- WHIP muxer ditambahkan ke
avformat/whip, sehingga streaming berbasis WebRTC dengan latensi di bawah 1 detik kini dapat ditangani langsung di dalam FFmpeg - Dasar perubahan ini adalah WHIP Version 3, dan selain nama muxer serta implementasinya, konteks log dan pesan kesalahan untuk SSL·DTLS·RTC juga dirapikan
- Magic number di dalam implementasi diganti menjadi makro dan fungsi, dan penanganan DTLS curve list, profil SRTP, magic number ICE STUN, serta RTP payload type juga diperhalus
- Pada jalur media, alih-alih ukuran frame tetap, kini digunakan
rtc->audio_par->frame_size, dan untuk konversi Annex B pada input MP4/ISOM digunakan h264_mp4toannexb - Konfigurasi build diubah agar
whiphanya aktif saat DTLS diaktifkan, dan saat ini dukungan dibatasi pada OpenSSL
Penambahan WHIP muxer dan keterkaitan build
- WHIP muxer ditambahkan ke
avformat/whipuntuk mendukung streaming dengan latensi di bawah 1 detik - Dasar implementasinya adalah WHIP Version 3
- File implementasi baru libavformat/whip.c ditambahkan
- Dokumentasi dan konfigurasi build juga ikut diubah
Perapian penanganan DTLS·ICE·RTP
- WHIP muxer dirapikan bersamaan dengan pergantian nama, dan pesan kesalahan serta konteks log SSL·DTLS·RTC juga ditingkatkan
- Magic number diganti dengan makro, dan sebagian logika dipisahkan menjadi fungsi
- Level log juga disesuaikan agar lebih jelas
- Di jalur DTLS, masuk sejumlah perubahan terkait kompatibilitas dan performa
- DTLS curve list diperbarui
- Nama profil SRTP untuk FFmpeg dan OpenSSL dirapikan
- DTLS handshake dan penanganan ICE dioptimalkan untuk meningkatkan performa
- ARQ dicegah dengan menggunakan satu timeout handshake dan server role
- Penanganan ICE dirapikan ke arah penyatuan request/response dan DTLS handshake ke dalam satu fungsi
- Magic number ICE STUN juga diperhalus
- RTP payload type diperbarui berdasarkan definisi Chrome
Pemrosesan media dan batasan OpenSSL
- Ukuran frame tetap di sisi audio diubah menjadi penggunaan
rtc->audio_par->frame_size - Untuk mengonversi input MP4/ISOM ke Annex B, digunakan
h264_mp4toannexb - Masalah timestamp OPUS dan pengaturan marker setelah penggunaan BSF juga ikut diperbaiki
- Implementasi TLS dan DTLS digabungkan ke dalam struktur bersama
- BIO callback, read, write,
print_ssl_error,openssl_init_ca_key_cert, daninit_bio_methoddigunakan bersama - Struktur data yang sama digunakan
- BIO callback, read, write,
- Kesalahan build OpenSSL diperbaiki agar dapat bekerja dengan Pion
configurediubah agarwhiphanya aktif ketikadtlsdiaktifkan- Saat ini yang didukung adalah OpenSSL
1 komentar
Opini Hacker News
Siaran WebRTC benar-benar membuat saya antusias. Alasannya sudah saya rangkum di README Broadcast Box dan PR OBS
Sekarang GStreamer, OBS, dan FFmpeg semuanya mendukung WHIP, jadi bisa dibilang kita punya protokol siaran video universal yang dapat dipakai di semua platform seperti mobile, web, embedded, dan perangkat lunak penyiaran
Saya sudah beberapa tahun mengerjakan open source dan siaran WebRTC, dan menurut saya ini tonggak besar
[0] https://github.com/Glimesh/broadcast-box?tab=readme-ov-file#...
[1] https://github.com/obsproject/obs-studio/pull/7926
Ini bukan bagian SCTP. Yang sebenarnya diimplementasikan adalah WebRTC-HTTP Ingestion Protocol, atau WHIP, yaitu protokol HTTP berlatensi rendah untuk terhubung ke gateway yang berkomunikasi dengan peer melalui protokol berbasis SCTP milik WebRTC
https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
Semoga suatu saat bisa berpindah ke protokol P2P berbasis QUIC atau WebTransport, alih-alih SCTP. QUIC menangani dengan baik hal-hal yang dulu dilakukan SCTP di atas UDP yang sudah ada, tanpa banyak menambah kompleksitas dan perbedaan implementasi
Salah satu kandidatnya adalah Media-over-QUIC (MoQ), tetapi browser tidak punya P2P QUIC dan progres di sana juga sudah mandek sejak beberapa tahun lalu
https://quic.video/ https://datatracker.ietf.org/group/moq/about/
Sebagian besar penyedia WHIP juga mendukung DataChannel, tetapi itu belum distandardisasi
Saya penasaran ini artinya apa. Apakah ini berarti sebuah situs web bisa terhubung langsung ke instance FFmpeg dan menerima stream audio atau video?
Penjelasan dari Phoronix sedikit lebih detail: https://www.phoronix.com/news/FFmpeg-Lands-WHIP-Muxer
Dengan ini, tampaknya akan jauh lebih mudah membuat stream self-hosted atau CDN streaming
FFmpeg benar-benar software media mandiri dan plug-and-play yang luar biasa, asal tahu cara menggunakannya
Saya membuat https://github.com/Glimesh/broadcast-box karena ingin membuat self-hosting dan WebRTC jauh lebih mudah
Klien XMPP Gajim sudah lama menunggu ini. Fitur panggilan audio/video praktis terbengkalai, dan mereka dengan sabar menunggu agar berkat FFmpeg fitur itu mudah ditambahkan kembali
Sekarang semuanya sudah menjadi taman tertutup atau layanan per aplikasi
Senang juga melihat grafis Anubis secara tak terduga. Sejauh ini saya melihatnya di ffmpeg dan gnu, antara lain
Saya berharap ini tidak membuat keberadaan ffmpeg di sistem menjadi lebih berbahaya. Kerentanan keamanan WebRTC menjadi penyebab banyak insiden kompromi, dan itu salah satu fitur pertama yang saya matikan ketika memasang browser
Implementasi ini sangat kecil, dan saya 100% yakin bahwa ini memberikan yang terbaik sebisa mungkin kepada pengguna
--without-whipkalau tidak diinginkan atau tidak diperlukan. Itu sepertinya idealSebaiknya buat image Docker yang hanya berisi ffmpeg dan dependensinya, lalu jalankan
docker rununtuk setiap pekerjaan konversi. Kalau juga perlu membuat thumbnail gambar atau dokumen, ClamAV, OpenOffice, dan ImageMagick bisa ikut dimasukkanSecara pribadi, saya berpendapat server yang memproses file buatan pengguna, lebih dari sekadar menerima dan menyajikannya, sebaiknya ditempatkan di VLAN terpisah yang dikunci ketat, atau kalau di AWS, di dalam Security Group
Ini bukan kritik bodoh terhadap proyek-proyek yang disebut. Keamanan itu sulit, terutama ketika menangani format biner yang sudah lama terakumulasi dan kadang direkayasa balik dengan cara yang meragukan. Lebih bijak mengakui ini sebelum terkena seperti 4chan
[1] https://ffmpeg.org/security.html
Bagus sekali. Saya sedang membuat remote control berbasis web, dan kalau dengan ini
ffmpeg gdigrabbisa dijadikan stream WebRTC lalu langsung dikonsumsi klien tanpa workaround ExpressJS yang sekarang saya lakukan, saya akan sangat puasMenarik bahwa deteksi bot terus memblokir saya di iOS Safari. Terjadi baik di WiFi kantor maupun data seluler
Semoga Anubis membiarkan saya lewat
"access denied", atau challenge-nya berulang tanpa hentiAnubis tidak membiarkan saya lewat ;(