当前位置: 首页 > article >正文

安卓GB28181-2022 RTP over TCP

     使用TCP传输RTP包,GB28181-2016和GB28181-2022 都是按IETF RFC4571来的。使用TCP发送RTP包,前面加个16位无符号长度字段就好(网络字节序)。具体定义格式如下:

   需要注意的是LENGTH值可以是0,0的话表示空包; 另外UDP传输RTP包,整个RTP包的长度一般就1000多个字节。TCP的话,LENGTH最大可以到0xFFFF, 对于视频帧或PS包可以考虑把RTP包切的大一点,这样可以少传一些RTP包头(RTP Header至少12个字节)。

   SDP也要做相应调整.

   媒体行定义如下(m=):

  "m=" media SP port ["/" integer] SP proto 1*(SP fmt) CRLF

   其中<proto>值为:"TCP/RTP/AVP"

   "setup" 属性:

"setup"属性值有:{ "active" , "passive"};

a=setup:active 表示主动发起连接.

a=setup:passive 表示被动accept连接.

   给出一个安卓端发起连接的SDP例子:

 v=0
 o=31020000011310000027 0 0 IN IP4 192.168.0.107
 s=Play
 c=IN IP4 192.168.0.107
 t=0 0
 m=video 15012 TCP/RTP/AVP 96
 a=rtpmap:96 PS/90000
 a=setup:active
 a=connection:new
 a=sendonly
 y=0200000001

   GB/T 28181 附录中给出了基于TCP协议的音视频媒体传输描述,相对于GB/T 28181-2016, GB/T 28181-2022增加了TCP客户端首次连接重连机制要求,如果首次TCP连接失败,需要尝试重连接,重连必须间隔一段时间再尝试(间隔时间应不小于1秒), 至少要尝试重连3次以上。

   首次重连机制,我自己的代码已经加上了, 接口如下:

    /*
    * Copyright (C) 1130758427@qq.com. All rights reserved.
    */


	/**
	 * 设置国标TCP连接超时时间
	 *
	 * @param timeout_ms, 单位是毫秒, 必须大于0, 不设置的话SDK将用默认值
	 * @return {0} if successful
	 */
	public native int SetGBTCPConnectTimeout(long handle, int timeout_ms);


	/**
	 * GB/T 28181-2022 附录D: TCP流媒体传输时, 首次TCP连接失败时, 应间隔一段时间进行重连, 重连间隔应不小于1秒, 此接口设置首次重连间隔时间
	 *
	 * @param interval_ms, 单位是毫秒, 必须大于等于0, SDK默认值是1000毫(1秒)
	 * @return {0} if successful
	 */
	public native int SetGBInitialTCPReconnectInterval(long handle, int interval_ms);


	/**
	 * GB/T 28181-2022 附录D: TCP流媒体传输时, 首次TCP连接失败时, 应间隔一段时间进行重连,重连次数应不小于3次, 此接口设置首次最大重连次数
	 *
	 * @param attempts, 最大重连次数, 必须大于等于0, SDK默认值是0, 如果对接的是GB/T 28181-2022 server,建议设置为3或更大的值
	 * @return {0} if successful
	 */
	public native int SetGBInitialTCPMaxReconnectAttempts(long handle, int attempts);

   GB28181-2022 相对于2016有些调整,基于国标的安卓执法记录仪要对接2022版服务端的话,代码也做相应调整更新, 更多问题可以联系qq: 1130758427


http://www.kler.cn/a/14906.html

相关文章:

  • Spring MVC开发及使用(8000字详解)
  • Springboot分布式项目优化策略
  • 聚观早报|中国将是ChatGPT主要对手;​iPhone 15将使用USB-C接口
  • Linux 查看进程和线程CPU和内存占用情况
  • 基于Vue的web设计打印方案
  • 登录页面jwt密钥,过滤器,拦截器,异常处理
  • Mysql表索引(介绍篇)
  • Win10分辨率怎么看?2种必须学会的方法!
  • SOLIDWORKS Electrical无缝集成电气和机械设计
  • 【消息队列】Kafka请求如何被处理的
  • 高数三重积分+离散二元关系+线代矩阵解线性方程
  • 2023-04-04 2016天梯赛决赛练习题L2
  • Let‘s Learn .NET|通过 Semantic Kernel .NET SDK 管理你的 OpenAI 项目
  • MySQL-----复合查询
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(五)
  • 汇编语言(第3版) - 学习笔记 - 实验8 分析一个奇怪的程序
  • 杭州云降价只是敲锣
  • ​力扣解法汇总2418. 按身高排序
  • 总结831
  • 软件测试必备的Linux知识(一)