[英]Creating a live, updating video stream with ffmpeg
我已经使用MediaSource
api 从我的网络摄像头设置了数据 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ,并将其设置为每 4 秒从我的网络摄像头以 webm 格式发送数据。 然后我在节点服务器上抓取它,使用createWriteStream
设置 pipe 并开始流式传输!
我坚持将媒体从 webm 转换为live m3u8。 下面是我正在运行的 ffmpeg 命令(它经历了无数次迭代,因为我尝试了文档中的内容)。
const cmd = `ffmpeg
-i ${filepath}
-profile:v baseline
-level 3.0
-s 640x360 -start_number 0
-hls_time 10
-hls_list_size 0
-hls_flags append_list
-hls_playlist_type event
-f hls ${directory}playlist.m3u8`
const ls = exec(cmd.replace(/(\r\n|\n|\r)/gm," "), (err, stdout, stderr) => {
if(err) {
console.log(error);
}
})
我无法删除播放列表末尾的#EXT-X-ENDLIST
,以保持 stream 为我的 web 播放器直播,所以当我点击播放时 - 视频播放当前 Z9ED39E2A631586B73EZ8 中的播放列表并在结束时停止。
谢谢
更新
这可能是质量/速度问题。 当我将质量降低到;
const cmd = `ffmpeg
-i ${filepath}
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease
-profile:v main
-crf 51
-g 48 -keyint_min 48
-sc_threshold 0
-hls_time 4
-hls_playlist_type event
-hls_segment_filename ${directory}720p_%03d.ts
${directory}playlist.m3u8
我能够获得像素化的实时视频。 然而,它很快就崩溃了……也许这在 Node/Web 浏览器中是不可能的?
马特,
我正在做一个类似的项目。 我正在将 NODE 转换为 FLV,然后使用api.video将 FLV 转换为 HLS。 我的代码在Github上,它托管在livestream.streamclarity.com上(并且是 WIP)。
如果我在本地运行我的节点服务器,并从浏览器中获取 stream - FFMPEG 永远不会崩溃并永远运行。 但是,当它被远程托管时,FFMPEG 会运行一段时间然后崩溃 - 所以我很确定问题是 websocket(或者可能是我的网络)。 降低我上传到服务器的视频大小会有所帮助(有点)。
我发现您在 FFMPEG 中进行的任何视频重新缩放或音频处理都会增加处理延迟,并且往往会导致更多崩溃。 我的解决方法是限制来自摄像机的视频,所以 FFMPEG 所要做的就是更改格式。
其他要考虑的 FFMPEG 选项:(替换 CRF 51)-preset ultrafast,-tune zerolatency
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.