有沒有簡單的方法可以將 ffmpeg 視訊串流傳輸到icesast 中?來源視訊已video/x-matroska
格式化。流本身有多種格式(mpeg、vorbis、aac 等)。我希望 ffmpeg 自行猜測原始程式碼,然後將其轉碼為瀏覽器「即時」可播放的任何內容,保持來源解析度和寬高比。video/webm
會做。我嘗試這樣做(包括使用輸出格式):
ffmpeg -i source.mkv -vcodec libvpx -cpu-used -5 -deadline realtime -content_type video/webm\
icecast://source:hackme@localhost:8000/vstream.webm
但串流無法播放且連線導致 ffmpeg 終止並出現以下錯誤:
av_interleaved_write_frame(): Connection reset by peer
Error writing trailer of icecast://source:hackme@localhost:8000/vstream.webm: Connection reset by peer
涉及 ffmpeg 以外的任何東西都可以,我只是希望它能工作。
答案1
事實證明,這要么很難實現,要么根本不可能。儘管如此,透過nginx
(with rtmp
module) 和的組合可以達到類似的效果ffmpeg
。在nginx
配置中(可能位於/etc/nginx/nginx.conf
)應附加以下部分以使其作為rtmp
伺服器工作(具有完全的公共存取權限。請注意,流未加密,任何能夠訪問您的網路的人都可以觀看它):
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
allow play all;
}
}
}
ffmpeg
然後串流影片檔案就像這樣調用一樣簡單:
ffmpeg -re -i video_file.mkv -c:v libx264 -f flv rtmp://host:1935/live
最後,任何想要觀看串流媒體的人都應該使用他們選擇的播放器連接到相同的地址:
rtmp://host:1935/live
注意:這裡是啟動的host
伺服器的主機名稱。nginx
答案2
簡而言之,你不能,因為 Icecast 是一個音訊串流系統,而不是視訊串流伺服器。
答案3
使用 obs 效果很好,但還沒有嘗試使用 ffmpeg。 obs 的優點是你可以讓玩家控制來回尋找。我遵循了這個指南,這非常簡單:
https://www.braillealphabetsoup.com/icecast-video-streaming-with-obs.html