
音视频
文章平均质量分 60
音视频基础知识
LIEYz
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
WebRTC:PeerConnection通信建立流程
WebRTC Peerconnection通信过程中的四种角色:Signaling ServerICE/TURN/STUN ServerRemote PeerLocal Peer通信过程中的基本概念:Room:Signaling Server使用Room的概念对同一组通信的peers进行配对管理,一个room中包含有1个或者多个peers。当没有peers存在时room销毁;当第一个peer连接到signaling server时执行create room动作,此时因为没有其他peers转载 2021-03-22 15:52:49 · 510 阅读 · 1 评论 -
webrtc mixer源码分析
AudioMixer的入口函数为AudioMixerImpl::Mix,功能分为三步:计算输出采样率:CalculateOutputFrequency获取音频数据:GetAudioFromSources混音:FrameCombiner::Combine下面分别对这三步进行分析CalculateOutputFrequency,...原创 2021-01-20 10:39:20 · 649 阅读 · 2 评论 -
RTMP、HTTP-FLV、HLS协议
RTMP概述RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接,在Connection链接上会传输一些控制信息,如SetChunkSize,SetACKWindowSize。其中CreateStream命令会创建一个Stream链接,用于传输具体的音视频数据和控制这些信息传输的命令信息。RTMP协议传输时会对数据做自己的格式化原创 2020-12-28 18:07:02 · 746 阅读 · 0 评论 -
live555 RTSPServer源码分析
GenericMediaServer先分析下 RTSPServer 的父类 GenericMediaServer,GenericMediaServer的功能主要分为三部分。监听服务端端口,收到客户端连接请求时,创建ClientConnection实例和客户端交互。 static int setUpOurSocket(UsageEnvironment& env, Port& ourPort); void incomingConnectionHandlerOnSocket(in原创 2020-12-14 16:11:29 · 385 阅读 · 0 评论 -
WebRTC 编译支持arm架构
WebRTC的工程通过交叉编译,可以在x86架构的linux系统上编译出支持arm架构的库。具体步骤如下:安装交叉编译工具apt-get install gcc-arm-linux-gnueabihf执行install-sysroot.py,需要翻墙#32位arm./build/linux/sysroot_scripts/install-sysroot.py --arch=arm#64位arm./build/linux/sysroot_scripts/install-sysroot原创 2020-10-15 10:49:53 · 2543 阅读 · 0 评论 -
libwebrtc,libmediasoupclient编译总结
libmediasoupclient使用libwebrtc,所以如果想编译libmediasoupclient,需先编译libwebrtc.编译libwebrtc获取webrtc源代码需要使用Chromium depot toolsgit clone https://chromium.googlesource.com/chromium/tools/depot_tools.git使用git...原创 2019-11-28 09:34:30 · 3905 阅读 · 11 评论 -
NVDEC_VideoDecoder_API_ProgGuide
概述从 NVIDIA® Fermi™ 一代开始,英伟达GPU包含一个视频解码器引擎(这本文中简称NVDEC),它提供全硬件加速解码视频的能力。NVDEC能解码许多码流格式: H.264, HEVC (H.265), VP8, VP9, MPEG-1, MPEG-2, MPEG-4 and VC-1. NVDEC运行完全独立于计算/图像引擎。英伟达提供编程NVDEC的软件API和库。这套软件API,以下称为NVDECODE API,它使开发者能访问NVDEC的解码特性,并且能让NVDEC与GPU上的其它引原创 2020-09-16 17:43:58 · 12689 阅读 · 7 评论 -
直播常见问题
从代码层面来看,什么是卡顿?其实是指播放器渲染的帧率太低,比如:1s 显示 3~5 帧,或者渲染完一帧后,过很久才渲染下一帧。因此,我们需要排查,是什么原因导致了播放器无法流畅地渲染数据,通常可能有如下几大类:网络带宽不足一个完整的直播应用,简单来说数据流是这样的:主播 -> CDN -> 观众因此,直播出现卡顿,三个端都可能是问题的源头:1. 主播端的网络不好,导致推流上行不稳定2. 服务端的线路质量不好,导致分发不稳定3. 观众端的网络不好,导致拉流下行不稳定网络性能测原创 2020-06-05 15:04:23 · 6346 阅读 · 0 评论 -
SDP协议
由于Web端、IOS、Android、PC、MAC端的差异性导致它们对音视频的支持能力不同,所以我们进行一些音视频会话之前,需要交互下彼此的音视频编解码能力、网络带宽和传输协议等信息,这些需要协商的信息需要用SDP来描述。SDP虽然具备这些能力参数信息的描述功能,但是SDP并不是传输协议,需要用RTSP、SIP、HTTP等协议进行承载传输、交换,如果大家协调好了之后,就可以建立会话,完成真实的音视频码流传输,再完成解码和播放。SDP格式SDP是由多个=这样的表达式组成,同时type是一个字符,val原创 2020-06-04 17:50:37 · 2223 阅读 · 2 评论 -
音视频封装格式:MP4
MP4起源于QuickTime,全名是MPEG-4 Part 14,属于MPEG-4的一部分。这部分内容主要规定了多媒体容器的格式。后来成为”ISO/IEC 14996-14”国际标准, 其中MP4就是对这种标准的一种具体实现,基于这个标准进行扩展或者裁剪还产生了像M4V、F4V等封装格式。同时MP4目前在移动端的Androids和IOS可以播放,也可以在FlashPlayer播放,跨平台和兼容性最好,MP4 还可以实现快进快放,边下载边播放的效果。术语:Box:这个概念起源于QuickTime中原创 2020-06-02 15:40:20 · 954 阅读 · 0 评论 -
音视频封装格式:FLV
FLV(Flash Video)是Adobe公司推出的一种流媒体格式,由于其封装后的音视频文件体积小、封装简单等特点,非常适合于互联网上使用。目前主流的视频网站基本都支持FLV。采用FLV格式封装的文件后缀为.flv。FLV文件的详细内容结构如下图:FLV headerFLV头占9个字节,用来标识文件为FLV类型,以及后续存储的音视频流。一个FLV文件,每种类型的tag都属于一个流,也就是一个flv文件最多只有一个音频流,一个视频流,不存在多个独立的音视频流在一个文件的情况。FLV BodyF原创 2020-06-01 15:39:54 · 536 阅读 · 0 评论 -
音视频封装格式:MPEG-PS
据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream)。PS文件分为3层:ps层(Program Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ps层是在pes层上加入了数据流识别和传输的必要信息。Ps和Ts的区别TS流与PS流的区别在于TS流的包结构是固原创 2020-05-29 16:18:57 · 1581 阅读 · 0 评论 -
音视频封装格式:MPTG2-TS
TS流主要是广电领域使用,我们看到的电视节目就是TS流封装,然后再在机顶盒解码解封装和播放。我们看电视有很多频道,比如CCTV、地方卫视等。而同一个频道还有很多节目,就像CCTV频道下面,在同一时刻就有CCTV1-CCTV14这些节目,那么这些频道、节目、音视频码流又是如何在TS里面进行区分呢?又是如何支持随机播放呢?又是怎么完成音画同步呢?仔细想想这就是TS复杂的原因,我们在互联网中可能借用了这种封装,只是传了一路视频和音频,所以很多字段我们并不理解,原因就是因为我们只使用了比较简单的一种场景。TS即"原创 2020-05-29 15:49:27 · 1279 阅读 · 0 评论 -
H264量化参数QP
编码流控策略常见的x264编码器为例CQConstants Quantize:表示完全不控制码率,尽最大可能保证图像质量,对于质量要求高、不在乎带宽(例如本地存文件)、解码器支持码率剧烈波动的情况,显然 CQ 是不二之选。CBRConstants Bits Rate, 静态比特率,表示编码器会尽量把输出码率控制为设定值,使用CBR编码时,比特率在流的进行过程中基本保持恒定并且接近目标比特率,始终处于由缓冲区大小确定的时间窗内。CBR编码的缺点在于编码内容的质量不稳定。因为内容的某些片段要比其他片段原创 2020-05-29 10:44:10 · 13585 阅读 · 4 评论 -
音视频封装格式:AAC
现在主流的封装格式支持的音视频编码标配是H264+AAC,其中像TS、RTP、FLV、MP4都支持音频的AAC编码方式。当然,后继者不乏Opus这种编码方式,它主要应用在互联网场景,比如现在谷歌的WebRTC音视频解决方案就用的Opus,最新发布的Android10支持的音视频编码方式就是AV1和Opus,但是AAC目前在广电,安防,电影院等还是应用最多,Opus目前还不足以威胁到AAC的地位。AAC的封装类型ADIF这种格式一般应用在将音频通过写文件方式存储在磁盘里,不能进行随机访问,不允许在文件中原创 2020-05-28 17:08:06 · 775 阅读 · 0 评论 -
SIP协议
SIP会话初始协议(Session Initiation Protocol) 是一个控制发起、修改和终结交互式多媒体会话的信令协议。SIP的六种基本方法:另外,还有一些扩展方法SUBSCRIBE、NOTIFY、MESSAGE、REFER、INFO等。SIP必须包含的头域:SIP响应消息状态码: 1xx 组的响应为临时状态,表明呼叫进展的情况; 2xx 表明请求已被成...转载 2019-10-16 09:29:46 · 10867 阅读 · 0 评论 -
RTP、RTSP、RTCP
RTSP(Real Time Streaming Protocol)协议以客户端服务器方式工作,对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,RTSP在体系结构上位于RTP和RTCP之上, 它使用TCP或RTP完成数据传输. RTSP用于流媒体服务器的远程控制。一次基本的RTSP操作过程首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。客户端再分析该SDP描述,并为会话中的每一原创 2020-05-12 17:21:34 · 733 阅读 · 0 评论 -
流媒体系统
一套大规模的流媒体系统,由编码工具负责对音视频文件编码压缩(h.264/h.265/VP9/AAC等);由流媒体服务器负责对数据包进行容器封装(flv/ts等)以及负责网络协议打包(RTMP/HTTP等);由CDN网络进行全网分发;由播放层负责对图像进行解码显示(FLASH/VLS/VIDEO JS等)。流媒体系统所需的核心组件包括:...原创 2020-05-08 18:11:41 · 1631 阅读 · 0 评论 -
重要的编码参数
我们在基于一些商用编码设备、开源编码工具搭建流媒体系统或者操作直播相关业务时,掌握了基本概念后,其实更重要的是对编码相关的参数要有深刻的认识和熟练的配置优化。以下给出一些比较重要的参数概念:GOP(Group of Pictures)一个GOP就是一组连续的画面,每个画面就是一帧, GOP就是很多帧的集合,以IDR帧开始。播放器显示画面是去找到最近的IDR帧来显示,所以为了实现秒开的体验,一...原创 2020-05-08 09:38:03 · 1581 阅读 · 0 评论 -
H264帧 通过 RTP 打包
多媒体实时通信(如语音或视频通话)一般会使用RTP/UDP进行传输,本文对H264视频在RTP传输的数据格式进行总结,RFC6184 《RTP Payload Format for H.264 Video》是H264 over RTP的规范文档,详细的内容和细节请参考该规范。H264帧结构RTP封包H264的方式NALU打包成RTP的方式有三种:单一 NAL 单元模式即一个RTP 包...原创 2020-04-28 11:30:43 · 915 阅读 · 0 评论 -
DMA_BUF
考虑这样一种场景,摄像头采集的视频数据需要送到GPU中进行编码、显示。负责数据采集和编码的模块是Linux下不同的驱动设备,将采集设备中的数据送到编码设备中 需要一种方法。最简单的方法可能就是进行一次内存拷贝,但是我们这里需要寻求一种免拷贝的通用方法。dma_buf是内核中一个独立的子系统,可以让不同设备、子系统之间进行内存共享的统一机制。DMA_BUF框架下主要有两个角色对象,一个是expo...原创 2019-08-13 10:31:32 · 2913 阅读 · 0 评论 -
v4l2总结
V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。在应用程序获取视频数据的流程中,都是通过 ioctl 命令与驱动程序进行交互,常见的 ioctl 命令有:VIDIOC_QUERYCAP /* 查询设备属性 */VIDIOC_G_FMT /* 查询的视频格式 */VIDIOC_S_FMT /* 设置...原创 2019-10-11 17:04:58 · 1373 阅读 · 0 评论 -
alsa总结
alsa工具集aplay,arecord用于播放和录制音频等, 支持RAW PCM、WAVE、AU、VOC文件类型; 用于操作PCM接口。查看声卡设备和PCM设备。aplay -larecord -lalsamixer,amixeralsamixer是Linux音频框架ALSA工具之一,用于配置音频各个参数;alsamixer是基于文本图形界面的,可以在终端中显示,通过键盘的上下...原创 2019-11-25 11:42:07 · 2189 阅读 · 1 评论 -
音频参数
一、音频指人耳可以听到的声音频率在20Hz~20kHz之间的声波。如果在计算机加上相应的音频卡—就是我们经常说的声卡,我们可以把所有的声音录制下来,声音的声学特性如音的高低等都可以用计算机硬盘文件的方式储存下来。反过来,我们也可以把储存下来的音频文件用一定的音频程序播放,还原以前录下的声音。二、采样频率指每秒钟取得声音样本的次数。声音其实是一...原创 2019-08-05 10:48:36 · 969 阅读 · 0 评论 -
RGB色彩空间
RGB色彩空间中每个像素点包含了R、G、B三种分量。RGB存储模式也有packed和planar两类,RGB色彩空间及存储模式比较简单,下面介绍几个有代表性的存储模式。1 存储模式RGB565使用16b(bit)表示一个像素,5b用于R,6b用于G,5b用于B。如下:12[ R G B ] [ R G B ] [ R G B ] [ R G B ][ R G B ] [...原创 2019-08-05 10:30:52 · 1507 阅读 · 0 评论 -
PCM数据格式
1.PCM(Pulse Code Modulation)也被称为 脉码编码调制,PCM中的声音数据没有被压缩,如: 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声); 22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道。2.WAVE...原创 2019-07-09 14:56:49 · 1928 阅读 · 0 评论 -
YUV色彩空间
YUV颜色空间是PAL、NTSC、SCEAM三大视频标准使用的颜色空间,主要应用于视频系统。YUV色彩空间中,Y表示亮度信息,U和V表示色度(色调和饱和度)信息。YUV存储格式分成三大类:packed:将Y、U、V分量交织存放在一起,和RGB的存放方式类似。内存中排列形式类似:YVYUYVYUYVYUYVYU...。在具体的存储模式命名中,packed格式不带后缀P。planar:将Y、U、V...原创 2019-07-09 12:05:20 · 1914 阅读 · 0 评论 -
音视频杂谈
1. 视频文件格式有不同的分类,如: WMV视频格式,文件名以“.wmv”结尾。WMV是英文Windows Media的缩写,该格式也是由微软开发,需要安装微软组件才能正常播放。 MPEG视频格式,文件名以“.mpg”或“.mpeg”结尾。MPEG是英文Moving Pictures Expert Group的缩写。MPEG是跨平台的视频格式,基本上在所有浏览器上都能正常播放。...原创 2019-08-09 16:57:59 · 937 阅读 · 0 评论 -
VGA ,HDMI ,IC,MCU,POC/POE供电,RS232,RS485
VGA接头:针数为15的视频接口,主要用于老式的电脑输出。VGA输出和传递的是模拟信号。大家都知道计算机显卡产生的是数字信号,显示器使用的也是数字信号。所以使用VGA的视频接口相当于是经历了一个数模转换和一次模数转换。信号损失,显示较为模糊。HDMI接口:HDMI接口传输的是数字信号。HDMI接口还能够传送音频信号。假如显示器除了有显示功能,还带有音响时,HDMI的接口可以同时将电脑视频和...原创 2019-08-14 11:20:16 · 2500 阅读 · 0 评论 -
音视频同步原理
要实现音视频同步,需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。这里的说的时间戳就是。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。假如视频帧率frame_rate=1/30,AVStream时间基time_base=1/900...原创 2019-09-12 18:08:27 · 3444 阅读 · 0 评论 -
gstreamer总结
学习资料中文资料:https://blog.youkuaiyun.com/u013554213/article/details/79676129官方资料:https://gstreamer.freedesktop.org/documentation/index.html?gi-language=c命令行工具 gst-inspect-1.0 :打印有关该插件或元素的信息 ...原创 2019-09-02 15:54:43 · 2807 阅读 · 0 评论 -
VPS SPS PPS
视频参数集VPSH.265中增加,主要用于传输视频分级信息,有利于兼容标准在可分级视频编码或多视点视频的扩展。注意:对于一个视频序列,无论它每一层的SPS是否相同,都参考相同的VPS。序列参数集SPSSPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原...原创 2019-09-10 09:18:05 · 4992 阅读 · 0 评论 -
H265码流分析
H265相比较于H264,除了包含SPS、PPS外,还多包含一个VPS;在NALU header上,H.264的HALU header是一个字节,而H.265则是两个字节。以OX4001为例,头信息可以被解析成4个部分,其中:forbidden_zero_bit = 0:占1个bit,与H.264相同,禁止位,用以检查传输过程中是否发生错误,0表示正常,1表示违反语法; nal_unit...原创 2019-08-20 14:02:22 · 3927 阅读 · 0 评论 -
H264码流分析
H.264原始码流(裸流)是由一个接一个NALU组成,它的功能分为两层,VCL(视频编码层)和 NAL(网络提取层),其中VCL是为了表示视频数据的内容,NAL层则是为了格式化数据。SODB与RBSPSODB 数据比特串 -> 是编码后的原始数据.RBSP 原始字节序列载荷 -> 在原始编码数据的后面添加了 结尾比特。一个 bit“1”若干比特“0”,以便字节对齐。NA...原创 2019-08-20 13:46:29 · 1179 阅读 · 0 评论 -
I、P、B 帧 IDR帧 GOP
I、P、B 帧I 帧、P 帧、B 帧的区别在于:B帧不可以作为参考帧。B帧具有更高的压缩率,但需要更多的缓冲时间以及更高的CPU占用率,因此B帧适合本地存储以及视频点播,而不适用对实时性要求较高的直播系统。B帧不可以作为参考帧。B帧具有更高的压缩率,但需要更多的缓冲时间以及更高的CPU占用率,因此B帧适合本地存储以及视频点播,而不适用对实时性要求较高的直播系统。I 帧...原创 2019-06-25 16:21:31 · 738 阅读 · 0 评论