GB28181音视频这块基本都需要PS,PS的打包和解析非常重要,GB28181文档只给出了打包纯视频或音视频一起打包的的说明,没有给出单独打包纯音频的说明,在实际场景中,特别是语音广播,语音对讲, PS打包纯音频很常见. 有些pts的clock frequency 也不是90000,我遇到过8000的,1000的都有.

GB28181给出的PS打包方式如下:

包头

系统头

PSM

PESV

PESA

但GB28181标准没给出纯音频的PS打包方式,由于没有说明,实现方式多种多样,下面给出一种比较容易解析的实现方式:

包头

系统头

PSM

PESA

包头(pack header),系统头( system header ), PSM, PES详细描述请参考ISO/IEC 13818-1 .

在PS流中,包头,系统头,PSM, PES包前三个字节都是0x00, 0x00, 0x01。pack header(包头)的start code是0x00, 0x00, 0x01, 0xBA; system header (系统头)的start code是0x00, 0x00, 0x01, 0xBA;PSM(Program Stream map )的start code是0x00, 0x00, 0x01, 0xBC; PES packet的start code是0x00, 0x00, 0x01, 八位的流ID(GB28181中规定视频的流ID是0xE0, 音频的流ID是0xC0)。

另外用PS打包纯音频,SDP描述中"m"字段的"media"项:audio.

rtp payload type 还是96.

rtp时钟频率标准是90hHz, 实际环境中也有其他值,比如1kHz.

下面是一个rtp over udp PS传输纯音频SDP例子:

v=0
s=Play
c=IN IP4 192.168.0.173
t=0 0
m=audio 27360 RTP/AVP 96
a=rtpmap:96 PS/90000
a=sendonly

我的代码对外提供的PS解析接口如下:

    // Copyright (C) 1130758427@qq.com/***设置 RTP Receiver Payload 相关信息** @param rtp_receiver_handle, CreateRTPReceiver** @param payload_type, 请参考 RFC 3551** @param encoding_name, 编码名, 请参考 RFC 3551, 如果payload_type不是动态的, 传null就好** @param media_type, 媒体类型, 请参考 RFC 3551, 1 是视频, 2是音频** @param clock_rate, 请参考 RFC 3551** @return {0} if successful*/public native int SetRTPReceiverPayloadType(long rtp_receiver_handle, int payload_type, String encoding_name, int media_type, int clock_rate);/***设置RTP Receiver PS的pts和dts clock frequency** @param rtp_receiver_handle, CreateRTPReceiver** @param ps_clock_frequency, 默认是90000, 用于一些PS流不是用90000打包的时间戳** @return {0} if successful*/public native int SetRTPReceiverPSClockFrequency(long rtp_receiver_handle, int payload_type, int ps_clock_frequency);/***清除RTP Receiver PS解析器配置的PSM, PSM具体清参考PS协议** @param rtp_receiver_handle, CreateRTPReceiver** @return {0} if successful*/public native int ClearRTPReceiverPSMap(long rtp_receiver_handle, int payload_type);/***设置RTP Receiver PS解析器的PSM, 有些PS流解析时需要设置, PSM具体清参考PS协议** @param rtp_receiver_handle, CreateRTPReceiver** @param stream_type, 流类型** @param elementary_stream_id, 流id** @return {0} if successful*/public native int SetRTPReceiverPSMap(long rtp_receiver_handle, int payload_type, int stream_type, int elementary_stream_id);

实际中遇到PS打包纯音频,如果只是求打包成PS,不会太麻烦的按基本规则来就好,解析会比较麻烦了,各种形式都有,解析代码实现上成本高些。

GB28181 PS打包纯音频相关推荐

  1. GB28181 PS流传输格式详解

    1.PS流传输格式预览 1.视频关键帧的封装 RTP + PS header + PS system header + PS system Map + PES header +h264 data 2. ...

  2. 视频流PS打包方式详解

    视频流PS打包方式详解 文章目录 视频流PS打包方式详解 1 PS流概述 2 PS封装格式 2.1 PES格式详解 2.2 PS头封装格式 2.3 PS system header封装格式 2.4 P ...

  3. 2019年09月VOA慢速英语听力音频打包下载(音频+字幕+文本)

    2019年VOA慢速英语听力打包下载 资源介绍 资源链接 资源介绍 Special English又叫"慢速英语",是VOA电台专为全世界非英语国家的初学英语的听众安排的一种简易. ...

  4. Flutter 学习之打包 - 纯Flutter项目生成Android包

    ###前言 前面介绍了Flutter中一些基本Widget的使用方法,下面我们来先下实战中是如何构建生成Android包的,本文我们主要介绍纯Flutter项目生成Android包的方法,以及遇到的问 ...

  5. RTP打包G711音频数据发送

    前面博客讲过G711编码,有两种G711A/G711U,主要在安防中应用,是一帧波形编码的音频数据,只是将PCM压缩一半数据量.一般G711,采样率8000,通道数1.所以G711中1B就是一个样本数 ...

  6. gb28181 ps流文件解析

    基础 假定是udp上接收包,端口 5060 ,如果是tcp是要加一些额外得代码, 可以使用jrtplib,或者自己写udpserver 放出udp socket 接收包,当然使用jrtplib等稍微简 ...

  7. GB28181协议--实时视音频点播(预览)

    1.基本要求 根据<GB/T 28181 -2016>第9章关于实时视音频点播的描述,其内容如下: 实时视音频点播的SIP 消息应通过本域或其他域的SIP 服务器进行路由. 转发, 目标设 ...

  8. android studio打包纯H5项目(集成5+SDK)

    下载地址 http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/103 我们下载5+SDK直接复制demo出来 可以自行修改名字,上面两 ...

  9. python 输出纯音频_Python如何录制系统音频(扬声器的输出)?

    我从上周就开始找这个了.我也尝试过pyaudio,当我使用它的另一个fork时,系统音频和麦克风音频混合在一起.我找不到任何其他模块来解决这个问题,因此我最终提出了这个问题.在 编辑:import p ...

最新文章

  1. java正则表达式替换指定字符串_笔记_正则表达式替换字符串中特定范围内的字符。...
  2. Java 堆内存优化
  3. 【C++】vs无法更新DoDataExchange方法问题解决
  4. upload-labs_pass21_CTF逻辑老饶了
  5. .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
  6. java多线程编程_阿里P8熬到秃头肝出来的:Java多线程+并发编程核心笔记
  7. python_递归原理
  8. 【kafka】Consumer is not subscribed to any topics
  9. 华为手机如何调时间显示_华为手机不亮屏也能显示时间日期?10秒就能设置,原来这么简单...
  10. struct类型重定义 不同的基类型_C++学习大纲:联合类型
  11. hdu 5977 Garden of Eden(点分治+状压)
  12. 给blog 增加文件下载统计
  13. 公式字符串转换为公式或结果
  14. html5 切换语言,Vue项目中使用国际化, 并配置动态切换语言的方法
  15. react-native学习小结
  16. jspstudy oracle,SQL不走索引的几种常见情况
  17. API接口测试用例设计
  18. python 基础代谢率计算_Python入门案例(三):BMR(基础代谢率)计算器
  19. oracle迁移价格,oracle 迁移的一般方法
  20. 抖音搬运视频热门技巧 剪辑后会修改视频md5

热门文章

  1. 什么是无线AP呢?它跟无线路由器的区别何在?在实际组网中无线AP的功能是什么?
  2. zookeeper 选取主 leader
  3. GC Roots详解
  4. 地铁惊现招聘程序员广告
  5. 一政网靠谱吗?考教师编制如何上岸?
  6. 1024程序员节,发表一个拯救程序员的开箱。
  7. 网站SEO优化报告的写法
  8. 表格上有两行表头时,最右侧始终固定的按钮水平对齐
  9. 计算机科学属于电气工程吗,电气工程及其自动化专业属于什么门类
  10. 计算机对比度亮度调整,显示器亮度对比度到底设置多少最合适?