GB28181推流
夏楚 edited this page 2023-04-26 13:03:16 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

介绍

ZLMediaKit支持GB28181的 ps-rtp推流支持的编码格式分别为 h264/h265/aac/g711/opus。 在收到GB28181推流后ZLMediaKit会依次做以下事情

  • rtp排序去重。
  • rtp解析成ps或ts。
  • ps或ts解析成h264/h265/aac/g711/opus
  • 输入到复用器生成rtsp/rtmp/ts/fmp4等格式以便转换成其他协议或容器。

简单使用

ZLMediaKit默认开启10000端口用于接收UDP/TCP的GB28181推流由于国标推流不好测试ZLMediaKit同时也支持rtp_mpegts推流代码会自适应判断是否为ps还是ts。 所以如果大家没有摄像头的情况下可以用FFmpeg简单测试基本上体验跟国标推流并无二致。

  • ffmpeg推流命令:
 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
  • MediaServer收到推流后的日志 图片

上图中这个推流的rtp ssrc为BFC2C622(16进制打印)这个流的app为rtp, stream_id为BFC2C622,您可以根据wiki来组合成url并播放这个流。

需要指出的是国标推流的app固定为rtp你只能通过代码来修改它stream_id为rtp流的ssrc这个是随机的在FFmpeg中貌似没法控制。

另外每次推流时请更换ssrc否则ZLMediaKit发现推流端ip和端口变化后会直接丢弃rtp包(现象如此issue)这样做的目的是为了防止两个设备使用同一个ssrc推流时互相干扰。

高阶使用

在推流给10000端口时您可能发现有个缺陷就是stream_id是ssrc比较抽象可能还没法控制。

那么我们能否自定义stream_id? 答案是肯定的ZLMediaKit通过restful api可以动态开启国标收流端口(同时支持udp/tcp模式)。

在使用openRtpServer接口动态开启国标收流端口后这个端口只能产生一个流也就是说一个摄像头需要一个服务器端口用于接收国标推流。

  • 以下是演示范例(postman工具调用openRtpServer接口创建随机端口)
图片
  • 然后启动FFmpeg推流
 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:50077
  • 以下是推流后注册的服务器日志 图片

  • 需要指出的是如果openRtpServer接口创建的端口一直没收到流或者解析不出流那么会自动关闭和释放。

调试文件生成

如果你的MediaServer能收到国标推流但是未出现媒体注册相关日志,那么有可能是流有些异常,你可以修改配置文件rtp_proxy.dumpDir指定调试文件导出目录, 这样ZLMediaKit会把国标流导出到该文件夹就像这样

图片

你可以直接用ffplay播放mp2/video后缀的文件rtp后缀的文件,你可以用测试工具test_rtp调试,或者你可以把它分享给其他人帮你分析原因。

让ZLMediaKit往其他国标服务器推流

你可以使用restful api让ZLMediaKit生成国标流并往其他服务器推送支持其他任何已注册的流转国标流。

  • postman调用startSendRtp接口推送国标流
图片

图片

  • 上图中是推送国标流给自己当然你也可以推送给其他服务器支持udp/tcp方式推流。

性能

GB28181的推流性能测试请参考#961

丢包问题调试

如果在测试GB28181 UDP推流时频繁打印以下日志:

图片

请查看此issue,特别提示,wifi情况下,由于无线网络干扰严重,丢包问题很可能确实是网络质量差导致的。

相关文章推荐阅读

WVP+ZLMediaKit+MediaServerUI实现摄像头GB28181推流播放录制

使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放

GB28181语音对讲