nginx rtmp 到 hls 流

nginx rtmp to hls streaming

我的场景是通过ffmpeg从RTSP源中拉取数据,发送到nginx-rtmp,使用nginx提供hls播放。互联网上有很多教程和问答。我关注了这个:

https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/

然而,却惨遭失败。为了让事情更容易理解,我想问核心问题:

谁负责创建 m3u8 播放列表文件?

我尝试分两步进行实验:首先,尝试推送本地 mp4 文件并通过 HLS 播放:

按照上面的教程,我尝试使用ffmpeg将本地mp4文件推送到nginx-rtmp,并使用videojs播放。浏览器报错:

VIDEOJS: ERROR: (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) No compatible source was found for this media. 

其次,我已经成功将推送到nginx-rtmp的视频文件保存为一系列FLV文件,我知道我可以使用exec_push来调用ffmpeg 将 flv 转换为与 HLS 兼容的格式。同样,这里的核心问题是,随着新视频数据的不断涌入,如何创建和更新 m3u8 文件。

目前,我希望高手帮我解决第一个问题——通过HLS播放静态mp4文件。任何关于 m3u8 播放列表和 mpeg-ts 文件的教程也非常感谢!

nginx-rtmp 模块在新片段到达时自行创建和更新播放列表。

要排除故障,请检查 .m3u8 文件是否创建在 nginx conf hls_path 中指定的文件夹下。 Rest 只是 nginx 使用 http 提供一个文件。 如果可行,请直接在 safari(safari 内置 HLS 播放器)或启用 Chrome(播放 HLS M3u8)扩展中尝试 HLS url。 如果可行,问题一定出在您的 player.html