我有来自RTMP
的{{1}}直播,我需要在带有Unreal Media Server
标记的HTML5页面上显示。到目前为止,我正在考虑使用ffmpeg库使用H.264编解码器对流进行转码并将其输出到.mp4文件,然后通过http协议访问它,如下所示:<video>
但是,我不确定这是否会从头开始播放整个输出文件或直播。我当前用于转码流的ffmpeg命令是:
http://ip_addr/output_from_ffmpeg.mp4
有人能指出我正确的方向吗?我还在文档中读到ffserver能够实现这一点但是Windows构建不可用。
答案 0 :(得分:3)
您无法使用mp4
格式直播,也无法仅使用HTML5代码直播。您的命令将流记录在静态mp4
文件中,以通过HTTP渐进式下载提供服务。
RTMP
需要Flash播放器。替代方案包括HLS
和支持桌面(例如Clappr,JWPlayer,Flowplayer)的Flash回退或支持它的浏览器上的媒体源扩展(MSE)的DASH
的网络播放器。
答案 1 :(得分:1)
我最终使用VLC Player(使用FFmpeg)使用H.264
编解码器对RTMP流进行转码,并以.ogg
格式显示,并内置了VLC的http服务器。此外,我为基于Apple的设备启动了HLS
流式传输的另一个VLC实例。以下分别是H.264
和HLS
的两个命令(注意:我在Windows上执行此操作,并使用wamp
进行HLS流,因为在这种情况下VLC不提供传输方式) :
vlc.exe -I dummy rtmp://_ip_addr_of_the_rtmp_stream :network-caching=0 :sout=#transcode{vcodec=theo,vb=512,scale=1,acodec=none}:http{mux=ogg,dst=:8181/stream.ogg} :no-sout-rtp-sap :no-sout-standard-sap :sout-keep
vlc.exe -I dummy rtmp://_ip_addr_of_the_rtmp_stream :network-caching=0 :sout="#transcode{vcodec=h264,vb=500, venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1}, aenc=none} :std{access=livehttp{seglen=10,delsegs=true,numsegs=5, index=C:\wamp\www\stream.m3u8, index-url=http://_ip_addr_of_your_web_server/stream-########.ts}, mux=ts{use-key-frames}, dst=C:\wamp\www\stream-########.ts}"
然后在html页面中简单地说:
<video width="320" height="240" controls autoplay>
<source src="http://_ip_addr_of_your_web_server/stream.m3u8" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'/>
<source src="http://_ip_addr_of_your_web_server:8181/stream.ogg" type="video/ogg">
Your browser does not support the video tag.
</video>
进一步阅读:
https://wiki.videolan.org/Documentation:Streaming_HowTo/Streaming_for_the_iPhone/
答案 2 :(得分:1)
虚幻媒体服务器v12(2016年9月15日发布)完全支持您的需求。 您不需要对任何内容进行转码。通过RTMP播放的同一广播现在可以在HTML5视频标签中播放。