C/C++音视频实战-gb28181系列-pjsip-sip栈-h264安防流媒体服务器

udbmaidns · · 678 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
![1.png](http://static.itsharecircle.com/240219/0c9285fea12eaf18e15af80a4df5d794.png) 很高兴给大家讲解关于C++音视频实战方面的知识,本文我将从零设计并开发可靠的高性能的音视频安防流媒体服务器,为大家提供安防流媒体领域的专业知识和实践经验。我将按照GB28181标准来完成监控设备之间的注册、保活、设备资源、 回放记录以及实时/回放流获取和推送。 文章涵盖了上下级的信令和流媒体两套服务器的开发。信令服务器负责处理设备之间的SIP信令交互和控制信息传输,而流媒体服务器则负责音视频实时流和回放流的传输以及视频编解码数据的处理。各个技术模块的处理包括都是按照解耦合思想进行开发,可兼容大家以后从事相关项目不同模块的搭配开发。 视频编码的目的是为了压缩原始视频,压缩的主要思路是从空间、时间、编码、视觉等几个主要角度去除冗余信息。由于 H.264 出色的数据压缩比率和视频质量,成为当前市场上最为流行的编解码标准。而 H.265 是在 H.264 的基础上,保证相同视频质量的同时,视频流的码率还可以减少50%。 一、编码结构 H.265在编码结构上分为视频编码层(VCL)和网络提取层(NAL)。 VCL:Video Coding Layer,主要包括视频压缩引擎和图像分块的语法定义,原始视频在 VCL 层,被编码成视频数据。简单版本的编码过程如下: 将每一帧的图像分块,将块信息添加到码流中; 对单元块进行预测编码,帧内预测生成残差,帧间预测进行运动估计和运动补偿; 对残差进行变换,对变换系数进行量化、扫描。 对量化后的变换系数、运动信息、预测信息等进行熵编码,形成压缩的视频码流输出。 NAL:Network Abstraction Layer,主要定义数据的封装格式,把 VCL 产生的视频数据封装成一个个 NAL 单元的数据包,适配不同的网络环境并传输。 二、常用音视频术语 容器/文件(Conainer/File):即特定格式的多媒体文件,比如mp4、flv、mkv等。 媒体流(Stream):表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器(有些码流音频他是纯PCM)。 数据帧/数据包(Frame/Packet):通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。 编解码器:编解码器是以帧为单位实现压缩数据和原始数据之间的相互转换的。 三、音视频开发的主要编程语言就是C和C++。 这块的专业知识积累是通用的,并不局限于某个特定的行业,属于程序员的技术功底。 可以重点关注如下几个方面: 计算机系统的底层工作原理 操作系统原理 程序的编译、链接和加载机制 C/C++语言特性背后蕴含的思想,底层工作原理,适用场景,存在什么样的问题 软件设计原则和设计模式 数据结构和算法 多线程并发编程原理 网络编程 跨平台 操作系统API 软件调试
678 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传