Ben*_*199 5 html video ffmpeg live-streaming
我正在尝试流式传输 MP4。
如果您流式传输 MP3,您可以将其流式传输到某些设备(可能通过 RTMP 或通过 IceCast)并通过 HTTP(但不能通过 HLS)观看。您的实时 MP3 文件类似于:http://example.com/live.mp3。在这里您可以收听现场生成的 MP3。
现在我想要一些与 MP4 类似的东西。我想将 MP4 (AVC/H.264) 流式传输到服务器(可能通过 RTMP)并希望在此位置接收直播:http://example.com/live.mp4。我不想使用 HLS(带有 M3U8 文件和 TS 文件)。
这可能吗?
我知道它可以在您将已生成的 MP4 转换为 FastStart/WebOptimized MP4 后使用,但我想要一个 LIVE mp4。
首先,比较苹果和香蕉:mp3 是编解码器,mp4 是容器。
如果您只是“流式传输”一个 mp4 文件,那么您只需流式传输二进制数据,而不会给解码器任何关于它正在查看的内容的线索。这就是 HLS 和 Co. 发挥作用的地方。
正如您提到的,为了流式传输 mp3,需要一些附加功能,例如 Icecast 或 rtmp 服务器。如果您想流式传输 AVC/AAC,则相同:您可以使用 DASH、HLS、rtmp、rtsp、udp 和 mpeg2 传输流作为容器,并且您的流已准备就绪。(大部分内容都基于 mpeg2ts)
问题在于客户端的要求。如果你喜欢HTML5兼容和跨平台,目前基本上只能使用HLS或DASH进行直播。
如果接收器应用程序可能与 Flash 或 HTML5 不同,则不意味着使用额外流服务器的最简单方法之一是使用 mpeg2 传输流的 UDP 流。
我将添加一个非常简化的绘图,以便您可以了解不同技术的工作原理:
此外,不断有新技术出现,例如,我在最近的应用程序中使用 WebRTC 向 HTML5 浏览器进行实时流传输。
理论上,您可以只传输 .mp4 二进制数据,但客户端需要为此做好充分准备。如果客户端在文件开头没有收到 moov Atom,则它实际上不再接收 mp4 流,而只是接收二进制 AVC/AAC 流。这或多或少正是 MPEG DASH 的工作原理。它将解码所需的信息与二进制文件块一起存储为单独的文件,并保存一段较短的时间。
[编辑] 当我刚刚跨过它时,这里有一个相关的 ffmpeg 命令:
ffmpeg -i D:\input.mxf -s 640x360 -hls_list_size 30 -hls_flags delete_segments+append_list+omit_endlist -hls_list_size 1 -f hls c:\xampp\htdocs\out.m3u8
Run Code Online (Sandbox Code Playgroud)
然后我下载并将其提取到我的网络服务器根目录: https: //github.com/video-dev/hls.js
从那里我从 hls.js 打开演示页面:http://localhost/hls/demo/index.html - 并在那里输入我的 m3u8“ http://localhost/out.m3u8 ”的 url ,它播放了我的现场直播视频没问题。无需在我的浏览器中安装任何插件;-)