有没有一种简单的方法可以将 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