【Netty4 简单项目实践】十一、用Netty分发mpegts到websocket接口

本文介绍了如何使用Netty处理ffmpeg推送的mpegts视频流,并将其转发到WebSocket接口,以便通过H5播放。通过ffmpeg的http和udp推流方式,结合Netty的ServerBootstrap和自定义解码器、编码器,实现了mpegts到WebSocket的转换。实验中发现UDP推流比HTTP更稳定,同时提到了jsmpeg播放器的选项调整对播放效果的影响。
摘要由CSDN通过智能技术生成

【前言】

推视频流的时候,rtmp会有3秒的延迟。目前有一种解决方案是用mpegts的格式解决。如果考虑用ffmpeg来推流的话,可以使用http格式和udp格式来推流。现在要做的事情是用Netty来转发rtmp到websocket接口上,然后用H5来播放。播放的插件使用jsmpeg这个项目来实现。


【ffmpeg推mpegts】

ffmpeg推流支持http和udp两种协议,目前还不支持websocket的方式。所以就打算用Netty做协议转发。假定本地接收流地址是 http://localhost:9090 在Mac上推屏幕上的画面可以用下面的命令

ffmpeg -f avfoundation -i "1" -vcodec libx264 -f mpegts -codec:v mpeg1video -b 0 http://localhost:9090


如果是推UDP的话,假定也是推到localhost,端口9094,可以使用下面的命令

ffmpeg -f avfoundation -i "1" -vcodec libx264 -f mpegts -codec:v mpeg1video -b 0 udp://localhost:9094


上面这两种方式都没有加入音频编码,如果要包含音频的话,需要指定音频方式

ffmpeg -f avfoundation -i "1" -vcodec libx264 -f mpegts -codec:v mpeg1video -acodec libfaac -b 0 udp://localhost:9094


【尝试HTTP推流】

按jsmpeg的教程,他把ffmpeg流推给nginx,让nginx转发到websocket上,而且并没有修改nginx的模块,所以我想如果把ffmpeg推的数据buff直接转发给websocket应该是可行的。至少http是可行的。那么下来要做的事情就是把Http的报文去掉头,只转发response body就可以了。真的是这样么?


我用Netty建了一个bootstrap,包含监听的EventLoopGroup和传输的EventLoopGroup,就是典型的一个服务bootstrap类型

ServerBootstrap,然后配置TCP模式设置一下TCP的nodelay,收发缓冲区大小等参数


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值