通过HTTP流式传输MP4而不使用段

时间:2017-11-19 15:02:12

标签: html5 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 / WebOptimised MP4后,但我想要一个LIVE mp4。

1 个答案:

答案 0 :(得分:3)

首先,你比较苹果和香蕉:mp3是一个编解码器,mp4是一个容器。

如果你只是" stream"一个mp4文件,你只需要传输二进制数据,而不给解码器任何关于它正在看什么的线索。这就是HLS和公司进来的地方。

正如您所提到的,为了流式传输mp3,需要一些像Icecast或rtmp Server这样的Addition。如果您想要流AVC / AAC,则相同:您可以使用例如DASH,HLS,rtmp,rtsp,udp与mpeg2传输流作为容器,您的流已准备就绪。 (大多数东西都是以mpeg2ts为基础的)

问题在于客户端要求。如果你喜欢HTML5兼容和跨平台,目前你基本上只能使用HLS或DASH进行直播。

如果Receiver应用程序可能与Flash或HTML5不同,那么不暗示使用其他Streaming Server的最简单方法之一就是使用mpeg2传输流的UDP Streaming。

我将添加一张非常简化的图纸,以便您了解不同技术的工作原理:

Streaming methods

此外,不断出现新技术,例如:我在最近的应用程序中使用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

然后我下载并将其解压缩到我的网络服务器根目录:https://github.com/video-dev/hls.js

从那里我打开了hls.js的演示页面:http://localhost/hls/demo/index.html - 并输入了我的m3u8" http://localhost/out.m3u8"在那里它播放我的现场视频很好。没有在我的浏览器上安装任何插件; - )

来源:Change ffmpeg input on the fly