使用GB28181播放公网摄像头(JAVA版本)-2

上篇文章中对GB28181的协议做了简单描述,这个还是很简单的,通过协议我们最主要的实现:

  1. 摄像头的注册
  2. 点播和关闭指令
    摄像头在点播后,会向指定的UDP端口推送视频流,这里耗费了不少时间

收流

首先我们需要启动一个UDP服务,将摄像头发送的数据接收,JAVA启动UDP端口的例子很多,就不举例了。一般每一帧大概1500个字节以下,收到数据后放到一个byte[]中,后面就要解析读取H264裸数据了

拆包

GB28181这块对内容的描述比较简单,造成走了很多弯路。
最早我直接去掉RTP12个字节的包头,然后写入一个文件中去验证,结果这个文件居然也可以播放,一些地方有一点花屏。

实际上包结构也比较简单,整体就是
12字节RTP包头 + PS数据
所以第一步 先把12个字节包头去掉

这里先贴个图
在这里插入图片描述
PS数据的格式处理起来比较麻烦
格式如下
关键帧
PSheader| PS system header | PS system Map | PES header | h264 raw data
非关键帧
PS header | PES header | h264raw data

关键帧也叫I帧,非关键帧是P帧
借用https://blog.csdn.net/comhaqs/article/details/102702713中的3张图
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这篇博客写的很好 我们获取其中绿色的部分。而我在实际抓包的时候,发现这个有一部分内容,就是我红框的地方,上图没有描述。
后来查阅到,这部分叫做SEI,这部分实际测试 不处理也不影响结果。

我在收流的时候,启动一个线程来接收流,拆包处理后,把数据传送给另外一个线程进行转码。

转码

还是用C++把 JAVA可以做到,图象也能出来 但是不稳定,JAVA做SIP部分就行了

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要将内网摄像头的视频推流到公网并实现web播放,需要进行一系列的设置和操作。以下是具体步骤: 1. 内网摄像头设置: - 确保内网摄像头已经连接至网络,能够在内网中正常工作; - 配置摄像头的网络设置,确保其能够获取到内网的IP地址; - 开启摄像头的RTSP(Real Time Streaming Protocol)流媒体服务,用于实现视频的实时传输; 2. 公网服务器准备: - 在公网上购买或租用服务器; - 确保服务器的公网IP地址能够被访问; 3. 配置服务器: - 安装流媒体服务器软件,如nginx、Wowza等; - 配置流媒体服务器,将RTSP视频流转换为公网可访问的协议,如RTMP(Real Time Messaging Protocol)或HLS(HTTP Live Streaming); - 配置服务器的防火墙,允许内网摄像头的视频流通过服务器的端口转发到公网; 4. 公网访问: - 在web页面上实现视频播放器,并通过RTMP或HLS协议获取公网服务器上的视频流; - 将视频播放器嵌入到web页面中; - 设置合适的视频流传输参数,如码率、分辨率等,以保证视频的质量和流畅性; - 确保公网用户能够访问web页面,并观看到内网摄像头推流的视频; 通过以上步骤,内网摄像头就可以实现推流到公网,并通过web页面进行播放。通过将摄像头的视频流经过中转服务器进行转换和传输,可以实现通过公网访问和播放内网摄像头的视频。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值