Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用ffmpeg创建实时更新视频流_Node.js_Ffmpeg - Fatal编程技术网

Node.js 使用ffmpeg创建实时更新视频流

Node.js 使用ffmpeg创建实时更新视频流,node.js,ffmpeg,Node.js,Ffmpeg,我已经使用MediaSourceapi从我的网络摄像头设置了一个数据流,并将其设置为每4秒以webm格式从我的网络摄像头发送数据。然后我在节点服务器上获取它,使用createWriteStream设置管道并开始流式处理 我一直在将媒体从webm转换为livem3u8。下面是我正在运行的ffmpeg命令(在我尝试文档中的内容时,它经过了多次迭代) 我无法删除播放列表末尾的#EXT-X-ENDLIST,以使流对我的web播放器保持直播,因此当我点击“播放”时,视频将播放当前状态的播放列表,并在播放结

我已经使用
MediaSource
api从我的网络摄像头设置了一个数据流,并将其设置为每4秒以webm格式从我的网络摄像头发送数据。然后我在节点服务器上获取它,使用
createWriteStream
设置管道并开始流式处理

我一直在将媒体从webm转换为livem3u8。下面是我正在运行的ffmpeg命令(在我尝试文档中的内容时,它经过了多次迭代)

我无法删除播放列表末尾的
#EXT-X-ENDLIST
,以使流对我的web播放器保持直播,因此当我点击“播放”时,视频将播放当前状态的播放列表,并在播放结束时停止

谢谢

更新

这可能是质量/速度问题。当我把质量降低到

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
我能得到一个像素化的现场视频。然而,它很快就崩溃了。。。也许这在节点/Web浏览器中还不可能?

Matt

我正在做一个类似的项目。我正在将节点转换为FLV,然后使用将FLV转换为HLS。“我的代码”处于启用状态,其宿主位于(并且是WIP)

如果我在本地运行节点服务器,并从浏览器获取流,FFMPEG将永远不会崩溃和运行。然而,当它被远程托管时,FFMPEG会运行一段时间然后崩溃——所以我很确定问题出在websocket(或者我的网络)。降低上传到服务器的视频大小会有所帮助(有一点)

我发现,在FFMPEG中进行的任何视频重新缩放或音频处理都会增加处理延迟,并且会导致更多崩溃。我的解决方案是限制来自摄像机的视频,所以FFMPEG所要做的就是更改格式

需要考虑的其他FFMPEG选项: (替换CRF 51) -预设超快,调零延迟

我正在做一个类似的项目。我正在将节点转换为FLV,然后使用将FLV转换为HLS。“我的代码”处于启用状态,其宿主位于(并且是WIP)

如果我在本地运行节点服务器,并从浏览器获取流,FFMPEG将永远不会崩溃和运行。然而,当它被远程托管时,FFMPEG会运行一段时间然后崩溃——所以我很确定问题出在websocket(或者我的网络)。降低上传到服务器的视频大小会有所帮助(有一点)

我发现,在FFMPEG中进行的任何视频重新缩放或音频处理都会增加处理延迟,并且会导致更多崩溃。我的解决方案是限制来自摄像机的视频,所以FFMPEG所要做的就是更改格式

需要考虑的其他FFMPEG选项: (替换CRF 51)
-预设超快,调零延迟

谢谢你的帮助,道格!我肯定会看看你的代码库——因为这是一个有趣的问题。我最终改用WebRTC,因为它在我的测试中更稳定。我在本地安装的FFMPEG被炸毁了,甚至在我本地的摄像头上。也许将来会有更多的调整!谢谢你的帮助,道格!我肯定会看看你的代码库——因为这是一个有趣的问题。我最终改用WebRTC,因为它在我的测试中更稳定。我在本地安装的FFMPEG被炸毁了,甚至在我本地的摄像头上。也许将来会有更多的调整!
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