问题描述
我的情况是通过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兼容的格式。同样,这里的核心问题是,随着无休止的新视频数据传入,如何创建和更新文件。
就目前而言,我希望专家帮助我解决第一个问题-通过HLS播放静态mp4文件。任何有关m3u8播放列表和mpeg-ts文件的教程也将受到赞赏!
解决方法
nginx-rtmp模块本身会在新片段到达时创建并更新播放列表。
要进行故障排除,请检查.m3u8文件是否在nginx conf的hls_path
中指定的文件夹下创建。其余只是nginx使用http为文件提供服务。
如果可行,请尝试直接在safari(safari内置HLS播放器)或启用Chrome(播放HLS M3u8)扩展程序中使用HLS网址。
如果可行,则问题必须出在您的player.html