FFmpeg tích hợp hỗ trợ streaming độ trễ cực thấp qua WebRTC (WHIP)
(git.ffmpeg.org)- WHIP muxer đã được đưa vào
avformat/whipcủa FFmpeg, cho phép xử lý streaming độ trễ dưới 1 giây dựa trên WebRTC ngay trong FFmpeg - Thay đổi dựa trên WHIP Version 3; ngoài tên muxer và phần triển khai, các ngữ cảnh log và thông báo lỗi cho SSL·DTLS·RTC cũng được sắp xếp lại
- Các magic number bên trong phần triển khai được thay bằng macro và hàm; việc xử lý danh sách DTLS curve, SRTP profile, magic number ICE STUN và RTP payload type cũng được tinh chỉnh
- Ở đường dẫn media, thay vì kích thước frame cố định, nay dùng
rtc->audio_par->frame_size, và sử dụng h264_mp4toannexb để chuyển đổi Annex B cho đầu vào MP4/ISOM - Cấu hình build được đổi để
whipchỉ bật khi DTLS được kích hoạt, và hiện phạm vi hỗ trợ được giới hạn ở OpenSSL
Bổ sung WHIP muxer và nối vào hệ thống build
- WHIP muxer được thêm vào
avformat/whip, hỗ trợ streaming độ trễ dưới 1 giây - Chuẩn triển khai là WHIP Version 3
- Tệp triển khai mới libavformat/whip.c được thêm vào
- Tài liệu và cấu hình build cũng được thay đổi cùng lúc
Sắp xếp lại xử lý DTLS·ICE·RTP
- WHIP muxer được tinh chỉnh phần triển khai cùng với việc đổi tên, đồng thời cải thiện thông báo lỗi và ngữ cảnh log cho SSL·DTLS·RTC
- Magic number được thay bằng macro, và một phần logic được tách ra thành hàm
- Mức log cũng được điều chỉnh rõ ràng hơn
- Trên đường dẫn DTLS, nhiều thay đổi liên quan đến tương thích và hiệu năng được đưa vào
- Danh sách DTLS curve được cập nhật
- Tên SRTP profile cho FFmpeg và OpenSSL được tinh chỉnh
- DTLS handshake và xử lý ICE được tối ưu hóa để cải thiện hiệu năng
- Dùng một handshake timeout duy nhất và server role để tránh ARQ
- Xử lý ICE được sắp xếp theo hướng hợp nhất request/response và DTLS handshake vào một hàm duy nhất
- Magic number ICE STUN được tinh chỉnh
- RTP payload type được cập nhật dựa trên định nghĩa của Chrome
Xử lý media và ràng buộc OpenSSL
- Kích thước frame cố định ở phía audio được đổi sang dùng
rtc->audio_par->frame_size h264_mp4toannexbđược dùng để chuyển đổi đầu vào MP4/ISOM sang Annex B- Vấn đề OPUS timestamp và thiết lập marker sau khi dùng BSF cũng được sửa cùng lúc
- Triển khai TLS và DTLS được hợp nhất vào một cấu trúc chung
- BIO callback, read, write,
print_ssl_error,openssl_init_ca_key_cert,init_bio_methodđược dùng chung - Sử dụng cùng một cấu trúc dữ liệu
- BIO callback, read, write,
- Lỗi build OpenSSL được sửa để hoạt động phù hợp với Pion
configuređược thay đổi để chỉ bậtwhipkhidtlsđược kích hoạt- Hiện đối tượng được hỗ trợ là OpenSSL
1 bình luận
Ý kiến trên Hacker News
Mình thật sự rất mong chờ phát sóng WebRTC. Mình đã tóm tắt lý do trong README của Broadcast Box và PR của OBS
Giờ đây GStreamer, OBS và FFmpeg đều hỗ trợ WHIP, xem như chúng ta đã có một giao thức phát video phổ quát có thể dùng trên mọi nền tảng như di động, web, nhúng, phần mềm phát sóng, v.v.
Mình đã làm việc trong mảng mã nguồn mở và phát sóng WebRTC suốt vài năm qua, và xem đây là một cột mốc lớn
[0] https://github.com/Glimesh/broadcast-box?tab=readme-ov-file#...
[1] https://github.com/obsproject/obs-studio/pull/7926
Không phải phần SCTP. Thực ra đây là triển khai WebRTC-HTTP Ingestion Protocol, tức WHIP, một giao thức HTTP độ trễ thấp để kết nối tới gateway giao tiếp với peer bằng giao thức dựa trên SCTP của WebRTC
https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
Hy vọng một ngày nào đó có thể chuyển sang giao thức P2P dựa trên QUIC hoặc WebTransport thay cho SCTP. QUIC xử lý tốt những gì SCTP làm trên UDP hiện có, mà không làm tăng mạnh độ phức tạp hay khác biệt giữa các triển khai
Một ứng viên là Media-over-QUIC(MoQ), nhưng trình duyệt không có P2P QUIC và tiến độ ở hướng đó cũng đã đình trệ từ vài năm trước
https://quic.video/ https://datatracker.ietf.org/group/moq/about/
Hầu hết nhà cung cấp WHIP cũng hỗ trợ DataChannel, nhưng nó vẫn chưa được chuẩn hóa
Mình thắc mắc điều này có nghĩa là gì. Có phải website có thể kết nối trực tiếp tới một phiên bản FFmpeg để nhận stream âm thanh hoặc video không?
Phoronix giải thích chi tiết hơn một chút: https://www.phoronix.com/news/FFmpeg-Lands-WHIP-Muxer
Như vậy có lẽ sẽ dễ hơn nhiều để tạo stream tự host hoặc CDN streaming
FFmpeg, nếu biết cách dùng, đúng là một phần mềm media độc lập, plug-and-play rất đáng kinh ngạc
Mình đã tạo https://github.com/Glimesh/broadcast-box vì muốn việc tự host và WebRTC trở nên dễ hơn nhiều
Gajim, một client XMPP, đã chờ điều này từ lâu. Tính năng gọi âm thanh/video gần như bị bỏ mặc, và họ đã kiên nhẫn chờ FFmpeg giúp việc thêm lại tính năng này trở nên dễ hơn
Giờ thì tất cả đã thành các khu vườn đóng hoặc dịch vụ riêng theo từng app
Thấy đồ họa Anubis một cách bất ngờ thì cũng vui. Đến giờ mình đã thấy nó ở ffmpeg và gnu, v.v.
Hy vọng điều này không khiến việc có ffmpeg trong hệ thống trở nên nguy hiểm hơn. Lỗ hổng bảo mật WebRTC là nguyên nhân của nhiều vụ xâm nhập, và đây là một trong những tính năng mình tắt đầu tiên khi cài trình duyệt
Triển khai này rất nhỏ, và mình chắc chắn 100% rằng nó cung cấp cho người dùng thứ tốt nhất có thể
--without-whipkhông. Như vậy có vẻ lý tưởngNên tạo một Docker image chỉ gồm ffmpeg và các phụ thuộc, rồi chạy
docker runcho từng tác vụ chuyển đổi. Nếu cũng cần tạo ảnh hoặc thumbnail tài liệu thì có thể đưa thêm ClamAV, OpenOffice, ImageMagick vàoCá nhân mình cho rằng các server vượt quá mức chỉ nhận và phục vụ file do người dùng tạo, tức có xử lý chúng, nên được đặt trong một VLAN riêng được khóa chặt; nếu trên AWS thì trong Security Group
Đây không phải là lời chê bai thiếu hiểu biết nhắm vào các dự án được nhắc tới. Bảo mật rất khó, đặc biệt khi xử lý các định dạng nhị phân tích lũy lâu năm và đôi khi được reverse engineer theo những cách đáng ngờ. Thừa nhận điều này trước khi bị như 4chan là điều khôn ngoan
[1] https://ffmpeg.org/security.html
Rất hay. Mình đang làm một hệ thống điều khiển từ xa nền web, và nếu có thể biến
ffmpeg gdigrabthành stream WebRTC để client tiêu thụ trực tiếp mà không cần cách làm vòng qua ExpressJS như hiện tại, thì sẽ rất hài lòngThú vị là mình cứ bị chặn bởi bot detection trên iOS Safari. Cả WiFi công ty lẫn dữ liệu di động đều bị vậy
Mong Anubis cho mình qua
"access denied", hay thử thách cứ lặp vô hạnAnubis không cho mình qua ;(