视频码流转换rtsp html5软件,实时将HTTP流传输到HTML5视频客户端的最佳方法

我真的很想了解使用node.js将ffmpeg实时输出流到HTML5客户端的最佳方法,因为有很多变量在起作用,而且我在这个领域没有很多经验,花了很多小时尝试不同的组合。

我的用例是:

1)IP摄像机RTSP H.264流由FFMPEG采集,并使用节点中的以下FFMPEG设置重新混合到mp4容器中,并输出到STDOUT。这仅在初始客户端连接上运行,因此部分内容请求不会尝试再次产生FFMPEG。

2)我使用节点http服务器捕获STDOUT并根据客户端请求将其流式传输回客户端。当客户端第一次连接时,我产生了上面的FFMPEG命令行,然后将STDOUT流通过管道传递到HTTP响应。

我使用以下HTTP标头(在流式传输预先记录的文件时也使用并起作用)

3)客户端必须使用HTML5视频标签。

我没有流传输回放的问题(使用fs.createReadStream和206 HTTP部分内容)到HTML5客户端,该视频文件以前是使用上述FFMPEG命令行记录的(但保存到文件而不是STDOUT),所以我知道FFMPEG流是正确的,甚至在连接到HTTP节点服务器时,我什至可以在VLC中正确看到视频直播。

但是,尝试通过节点HTTP从FFMPEG进行实时流传输似乎要困难得多,因为客户端将显示一帧然后停止。我怀疑问题是我没有将HTTP连接设置为与HTML5视频客户端兼容。我已经尝试了多种方法,例如使用HTTP 206(部分内容)和200个响应,将数据放入缓冲区中,然后在没有运气的情况下进行流式传输,因此,我需要回到第一个原则,以确保将其正确设置道路。

这是我对这应该如何工作的理解,如果我错了,请纠正我:

1)应该设置FFMPEG来分割输出并使用一个空的moov(FFMPEG frag_keyframe和empty_moov mov标志)。这意味着客户端不会使用moov原子,该原子通常位于文件末尾,而在流传输时无关紧要(文件末尾),但是这意味着没有可能的查找,这对我的用例来说很好。

2)即使我使用MP4片段和空白的MOOV,我仍然必须使用HTTP部分内容,因为HTML5播放器将等到整个流下载完毕后再播放,而实时流永远不会结束,因此无法使用。

3)我不明白为什么在实时流式传输时将STDOUT流传输到HTTP响应为什么仍然不起作用,如果我保存到文件中,则可以使用类似的代码轻松地将此文件流式传输到HTML5客户端。也许这是一个定时问题,因为FFMPEG生成需要一秒钟才能启动,连接到IP摄像机并将块发送到节点,并且节点数据事件也不规则。但是,字节流应与保存到文件完全相同,并且HTTP应该能够应付延迟。

4)当从相机流式传输FFMPEG创建的MP4文件时,从HTTP客户端检查网络日志时,我看到有3个客户端请求:对视频的常规GET请求,HTTP服务器返回大约40Kb,然后是部分内容请求,其字节范围为文件的最后10K,然后最终请求为中间的位未加载。也许HTML5客户端一旦收到第一个响应,便要求文件的最后部分加载MP4 MOOV原子?如果是这种情况,将无法进行流式传输,因为没有MOOV文件,也没有文件结尾。

5)在尝试实时流式传输时检查网络日志时,我收到了一个中止的初始请求,仅收到了200个字节,然后再次发出了200字节的中止请求,而第三个请求的长度只有2K。我不明白为什么HTML5客户端会中止请求,因为字节流与从记录的文件流式传输时可以成功使用的字节流完全相同。似乎节点也没有将其余的FFMPEG流发送到客户端,但是我可以在.on事件例程中看到FFMPEG数据,因此它正在到达FFMPEG节点HTTP服务器。

6)尽管我认为将STDOUT流传输到HTTP响应缓冲区应该可以,但是我是否必须构建一个中间缓冲区和流,以允许HTTP部分内容客户端请求像正常(成功)读取文件时一样正常工作?我认为这是我遇到问题的主要原因,但是我不确定在Node中如何最好地进行设置。而且我不知道如何在文件末尾处理客户端对数据的请求,因为没有文件末尾。

7)我在尝试处理206个部分内容请求时走错了轨道,并且这应该在正常的200个HTTP响应下起作用吗?HTTP 200响应对于VLC可以正常工作,因此我怀疑HTML5视频客户端仅适用于部分内容请求吗?

由于我仍在学习这些东西,因此很难解决该问题的各个层次(FFMPEG,节点,流,HTTP,HTML5视频),因此任何指针将不胜感激。我已经花了数小时在此站点和网络上进行研究,但我还没有遇到能够在节点中进行实时流式传输的任何人,但我不能成为第一个,而且我认为这应该可以工作(以某种方式!)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR设备同时接入 (支持GB28181-2011版本和GB28181-2016版本)     2、支持国标GB28181设备注册和注销,对所有设备进行管理,获取资源 对资源列表进行管理     3、支持国标GB28181的目录订阅,对接收的订阅通知进行处理     4、支持国标GB28181实时视频请求(支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     5、支持国标GB28181 PTZ控制     6、支持国标GB28181 录像查询     7、支持国标GB28181 历史视频点播 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     8、支持国标GB28181 历史视频下载 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     9、支持对接收的国标实时视频码流和历史视频码流进行管理     10、支持将国标的PS码流转换成ES码流     11、支持丢包打印和断打印     13、支持RTSP服务和RTSP会话管理     14、支持RTSP客户端 UDP传输和TCP传输     15、支持国标GB28181设备5000路左右的接入管理,支持国标请求视频在100路左右     16、支持国标28181设备和通道写入mysql数据库      17、支持设备的云台PTZ控制,控制类型:上"up",下"down",左"left",右"right",左上"leftup",左下"leftdown",右上"rightup",右下"rightdown",镜头近"zoomin",镜头远"zoomout", 焦距远"focusfar",焦距近"focusnear", 设置预置位"setpos",调预置位"callpos"     18、支持历史视频的查询和历史视频的点播控制     19、支持对国标设备的控制,"record":录像开启和停止-通道id "guard":布放和撤防-报警通道id "reboot":设备重启-设备id "keyfame":强制关键帧-通道id     20、支持对实时视频的图片截图,通过http直接访问图片    21、支持rtmp和hls会话一直保留    22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知    23、支持公网和局域网同时存在

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值