![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
音视频开发
文章平均质量分 77
mo4776
这个作者很懒,什么都没留下…
展开
-
对海康28181摄像头PS流解码的支持(三)
上次分析处理PS流的结构后,仔细观察了下具体的PS包结构,如下图: 在pes包中跳过pes header后即是h264的码流了,如图圆圈所示。头四个pes包携带h264帧类型即为sps,pps,sei和I帧,如图小圈标记的。解析代码如下: #ifndef PROGRAM_STRAM_PARSER_H#define PROGRAM_STRAM_PARSER_H#incl...原创 2017-10-26 11:09:55 · 6131 阅读 · 2 评论 -
对海康28181摄像头PS流解码的支持(二)
将海康摄像头的流拉过来后,去掉rtp包头后直接存为mpg文件,分析其结构,发现其很奇怪,文件内容如下: 标红的依次为:ps header, system header ps,ps map和两个pes,其中第一个pes的长度为42,第二个pes的长度就很怪异,长度为FFC6即65478字节. 直接按照文件内容分析的逻辑在此后面的rtp包全部带的是h264数据,直到最后总长度为65...原创 2017-10-20 17:17:38 · 5459 阅读 · 1 评论 -
对海康28181摄像头PS流解码的支持(一)
背景 我们的项目是基于sip的IMS系统,需要添加对海康28181摄像头的支持,所以分为以下几步:向海康摄像头发起点播请求,基于sip. PS流过来后,剥出h264流. 对h264流进行解码. 一.发起sip请求 按照GB28181的规范,sip头域必须携带subject字段,to字段必须是摄像头的视频编码通道ID,sdp中s行固定为play,需添加一个a行描述为PS流...原创 2017-10-15 11:22:00 · 7269 阅读 · 3 评论 -
海康28181摄像头接入的注意点
对一个海康摄像头以28181协议接入(海康摄像头设备级的接入,非系统级别接入),分为两步:通过sip invite将海康的ps流拉出来,由于是设备级的接入,所以直接对摄像头进行invite发起点播。对拉过来的ps流进行解码。注意点sip invite构造时需要注意几个字段,如下invite 消息标红的字段to 头域需要携带海康摄像头的通道ID必须携带Subject头域,值为 摄像...原创 2018-12-21 22:19:46 · 19245 阅读 · 0 评论 -
RTP RR及SR包中NTP的转换
背景在RTCP的RR及SR中report block存在一个ntp字段,这个值为RR或SR产生时间戳。RFC3550的第4节描述了它的意义Wallclock time (absolute date and time) is represented using thetimestamp format of the Network Time Protocol (NTP), which is i...原创 2020-03-09 16:34:07 · 1342 阅读 · 0 评论 -
视频流jtter buffer实现的难点
背景在项目中遇到这样一个问题,sip客户端通过监控网关去点播海康的摄像头,发现图像出来的很慢。抓包发现,码流的最开始是携带sps,pps及关键帧的,那么可以判断出问题可能是如下两点原因:终端中的媒体库将收到的sps,pps及关键帧信息丢掉了码流携带的sps,pps及关键帧信息有问题导致解不出来定位通过抓包,将抓包文件中的视频码流提取出来存成文件,发现是可以播放,所以是码流有问题可...原创 2018-11-14 11:28:36 · 711 阅读 · 0 评论 -
RTP头的解析及大小端处理的细节
RTP头的解析及大小端处理的细节在看如何解析RTP头之前,先复习下大端和小端的概念,再分析如何解析RTP头大端和小端在之前本以为大端和小端只是针对的多字节,其实在一个字节内的比特顺也有大小端的概念,这里列两个结论大小端是不同的CPU架构对内存的使用方式不同,在x86下是小端(多字节序和比特序)。所有的网络协议都是以大端序(多字节序和比特序)来定义。以太网中是以小端来发送比特...原创 2018-09-02 20:53:50 · 3224 阅读 · 3 评论 -
提取pcap文件中的opus及h265码流的小工具
背景在音视频系统的调试中,经常要抓包进行码流分析,所以写了个小工具,可以直接提取pcap格式抓包文件中的码流。现在小工具支持opus和h265的码流提取。用法提取h265视频流抓包 在windows下用wireshark抓取数据包,如下图 过滤rtp包,记录需要提取的码流的ssrc值,在这里选择0x9f8d9c2c。将抓包文件另存为pcap格式,如下图 3...原创 2018-07-27 17:45:57 · 3390 阅读 · 8 评论 -
rtp延迟计算一个公式
在rtp流的收端检测网络延迟时有一个比较典型的延迟计算公式,遵循的原理如下:在发端设置rtp包的时间戳公式为: ts_current_90000hz = (当前系统时间ms - start_time_ms) * 90000.0 / 1000.0 则在收端根据这个公式可以估算出一个rtp的延迟 delay = lastest_recv_time - (last_rtp_recv_time + ...原创 2018-01-07 15:42:55 · 4500 阅读 · 0 评论 -
实现对rtp H264码流的组帧
rtp打包h264,包含了三种类型的包: 一个rtp包携带了一帧数据(single) 多个rtp包携带了一帧数据(FU-A) 一个rtp包携带了多帧数据(STAP-A) 在实际应用中绝大部分采用的是前两种方式,对方式1常见的是对nalu的sps,pps进行打包,因为sps和pps数据量很小,一个rtp包足以携带,一般采用 sps,pps分别由一个rtp包携带的方式。对IDR数据及...原创 2017-10-30 13:10:41 · 6768 阅读 · 5 评论 -
RGB数据的处理
RGB数据的处理基本概念分辨率为640*480的图像,其像素点的个数为 widthxheight,即为640x480 = 307200二值图像 每个像素通过一位来存储即为二值图,取值只有0和1。灰度图像 在二值图像中加入许多介于黑色与白色之间的颜色深度,就构成了灰度图像,就典型的就是256色图,像素取值可以是0到255之间的整数值,那么每个像素占一个字节即8位,灰度图反映的是该...原创 2018-08-07 18:44:30 · 8528 阅读 · 2 评论 -
使用PortAudio检索设备
背景在项目中,有个定制的银河麒麟x86系统,我们的终端软件放上去后,总是采集不到音频,经定位发现,系统中有多个音频设备,但是默认的选用的音频设备采集不到声音,但选择一个USB的音频采集设备就可以采集到声音。而我们的终端软件又没有提供音频采集,回放设备的选择功能。所以需要加入这个功能,终端软件需要跨平台,兼容windows与linux实在是比较繁琐。所以直接选用了PortAudio库,来屏蔽这些细节,将这些烦人的细节丢给PortAudio库去解决吧。PortAudio is a free, cross原创 2020-07-13 19:14:28 · 1394 阅读 · 0 评论 -
通过libfdk-aac的使用来看音频参数配置的策略
灵活性背景在一些实时音视频系统中,终端软件通常可以设置音频编码参数,如采样率,通道数,码率等。开放编码参数可配,增加了灵活性,但是在实现增加了复杂度。特别是某些编码格式,如果考虑到音频的采集,回放,实时性。这里针对AAC的编解码库libfdk-aac来说说参数可配的限制。libfdk-aac不同AAC规格的差异性不通规格AAC编码输入帧的长度要求不一样,如下所示:AACENC_GRANULE_LENGTH = 0x0105, /*!< Core encoder (AAC) a原创 2020-06-05 10:55:48 · 2048 阅读 · 4 评论 -
C++11 chrono库在音视频系统中的应用
基本概念chrono包括三个基本的概念:间隔(Duration),时间(Clock),时间点(Time Point),通过这三个基本概念可以很好的将时间处理抽象出来。引用C++11的文档说明 Durations They measure time spans, like: one minute, two hours, or ten milliseconds. T...原创 2018-04-28 09:31:28 · 406 阅读 · 0 评论 -
用circular_buffer实现的播放缓存队列
背景在我们的一个项目中,开音视频会议时,音频比视频慢了将近一秒,由于历史问题,会议服务器没法进行改动,所以要求在解码端做这样一个兼容处理,主动缓存视频达到将视频延时播放的目的,从而实现音视频的同步。延时的大小可配。解码播放的基本流程整个视频解码端的流程如下: 在这个流程中,rtp模块与JitterBuffer模块是串行的。JitterBuffer模块与解码模块是异步关系,解码...原创 2018-04-26 09:29:00 · 1759 阅读 · 0 评论 -
监控网关的设计思路
监控网关的设计思路监控网关在voip系统中,信令都是基于sip协议的,在接入摄像头时一般就需要一个网关,用于sip协议到rtsp协议的转换及媒体流的转发。监控网关将摄像头虚拟成sip终端,注册到sip服务器上,可供voip系统内部的sip终端直接点播视频。点播时序图以下是核心流程点播的简单时序图,主要用于说明监控网关所扮演的一个角色。Created with Rapha...原创 2018-04-09 09:36:31 · 2842 阅读 · 0 评论 -
Directshow采集视频细节
Directshow 采集遇到的几个问题CPU占用高windows下使用的网络摄像头产品各种各样,支持的分辨率,视频格式也各有不同,在我们的项目中使用的一款摄像头,遇到一个奇怪了的问题,只是开启了摄像头的采集(采集为回调模式,回调函数中啥都没做),进程占用的CPU就会达到7%左右。经查阅资料发现了问题,在采集视频时,我指定的视频格式为RGB24而实际上该摄像头并不支持RGB24数据。Di...原创 2018-03-20 19:36:16 · 834 阅读 · 0 评论 -
视频编码参数与视频采集参数匹配策略
在voip系统中,音视频客户端往往需要配置视频编码的分辨率,码率和帧率,其中分辨率和帧率是与采集息息相关的。一般的如果直接使用的是usb摄像头,对于不同厂家,不同规格的摄像头所支持的分辨率,图像格式和帧率是有很大不同的,以下是windows下获取摄像头支持格式属性的方法: //hwnd为显示窗口的句柄 int CCamera::ShowCapturePropertyPage(HWND ...原创 2017-11-03 17:40:53 · 1439 阅读 · 0 评论 -
流媒体服务器编程学习
以前开发会议服务器是基于sip,rtp协议的,网络处理模块写的特别简单,对每路呼叫中的媒体流都是采用一个线程处理,一路呼叫中包含两路流,一路视频流,一路音频流,对应的一路呼叫就需要两个线程,这样算下来,一次会议中的有4个成员,对应的有8路流,光数据收发线程就需要8个。线程多了,线程上下文切换就会耗费大量资源。这种模型显然是不可取的,特别是设计媒体服务器时,往往过多的只考虑了媒体处理模块的架构,...原创 2017-12-10 20:58:19 · 807 阅读 · 0 评论 -
一种用于voip客户端多窗口视频渲染的实现思路
本文描述的只是客户端界面多窗口与opengl渲染环境关联的一种思路,并非描述opengl如何渲染视频图像。其中黄亮色背景标识的就是详细的思路描述背景最近有一个项目,客户端运行环境是麒麟x86系统,客户端点播监控图像,客户端的界面是用QT做的,图像显示时是分屏模式,最大分屏数为9分屏(包括4分屏,6分屏等),分屏模式间可以相互切换。每个分屏显示一路图像。9分屏如下图所示:界面业务:界面层...原创 2019-05-21 18:15:10 · 247 阅读 · 0 评论 -
彻底弄懂I420格式
YUV的概念YUV 和我们熟知的 RGB 类似,是一种颜色编码格式。它主要用于电视系统和模拟视频邻域(如 Camera 系统)。YUV 包含三个分量,其中 Y 表示明亮度(Luminance 或 Luma),也就是灰度值。而 U 和 V 则表示色度(Chrominance 或 Chroma),作用是描述图像色彩及饱和度,用于指定像素的颜色。没有 UV 分量信息,一样可以显示完整的图像,只不过是...原创 2019-08-18 18:12:56 · 5745 阅读 · 1 评论 -
windows下编译x264库
背景现在的x264需要通过mingw环境来进行编译,我要编译出64位版本和32位版本的静态,而mingw只是32位环境,所以我选择通过ming-w64+msys2作为编译环境。安装msys2和MinGW-W64我们先安装msys2,安装比较简单直接下一步下一步就好了。通过msys2的pcaman包管理工具来安装MinGW-W64,这种方式最简单。在msys2的安装目录下,运行msys2....原创 2018-11-29 09:45:22 · 2680 阅读 · 0 评论