音视频学习记录

本文深入探讨了音视频的基础知识,包括视频的颜色空间、颜色编码、编码方式和编码器,如H.264、H.265,以及音频的声道、采样格式、编码方法如AAC、MP3等。同时讲解了音视频封装格式MP4,传输协议RTMP,以及音视频同步等核心概念。
摘要由CSDN通过智能技术生成

视频

颜色空间

色彩转换
数字电视的格式(BT.601 BT.709 BT.2020)和接口(BT.656 BT.1120 BT.2077)
伽马空间与线性空间详解
对 Gamma 校正的个人理解
FFMPEG一些color属性处理

颜色编码

iOS中的YUV格式

YUV

Y:明亮度(Luminance,Luma),也就是灰度值
U和V:色度(Chrominance,Chroma),描述影像色彩及饱和度

采集方式
  • YUV4:4:4 (每一个Y对应一组UV分量)
  • YUV4:2:2 (每两个Y共用一组UV分量)
  • YUV4:2:0 (每四个Y共用一组UV分量)

用黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量,则三种采样方式可由下图来表示:
YUV取样

存储方式

对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。
以YUV4:2:0为例,它又被分为YUV420P与YUV420SP
YUV420P, Plane模式(Y,U,V三个plane)将Y,U,V分量分别打包,依次存储
YUV420P
YUV420SP(NV12/NV21): two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储
YUV420SP
设置为kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange时,表示输出的视频格式为NV12(BiPlanar指双平面模式,即将Y和UV分开存储,VideoRange指颜色空间);
设置为kCVPixelFormatType_420YpCbCr8Planar时,表示使用I420
I420格式:y,u,v 3个部分分别存储:Y0,Y1…Yn,U0,U1…Un/2,V0,V1…Vn/2
NV12格式:y和uv 2个部分分别存储:Y0,Y1…Yn,U0,V0,U1,V1…Un/2,Vn/2
NV21格式:同NV12,只是U和V的顺序相反。

编码

帧类型

  • I frame : 自身可以通过视频解压算法解压成一张单独完整的图片
  • P frame : 需要参考其前面的一个I frame 或者B frame来生成一张完整图片
  • B frame : 既要参考其前一个I frame 或者 P frame以及其后一个P frame来生成一张完整的图片

帧或图片通常会分为几个宏块(Macroblock),宏块是运动预测的基本单位,一个完整的图像通常被分为几个宏块,如 MPEG-2 和较早期的编解码器定义宏块都是 8×8 像素,以宏块为基准选择特定的预测类型,而非整个图像都使用相同的预测类型,具体如下:

  • I 帧:只包含节点宏块。
  • P 帧:可含有节点宏区块或预测宏区块。
  • B 帧:可含有节点、预测和前后预测宏区块。
    B帧也可以被参考

编码器

H.264

H264提供的是16*16的pixel macroblocks
H264码流中SPS PPS详解
H.264 码流格式: Annex-B, AVCC与extradata详解
视频可用性信息(VUI)
X264算法参数二(VUI参数配置)
两种HDR格式(HLG, HDR10)的理解

H.265/HEVC

H265提供的是64*64
(推荐阅读)H264, H265硬件编解码基础及码流分析
H.264 视频编解码技术分享–AnnexB 和 avcC
HEVC有两种类型的NAL units,一种是VCL(video coding layer)NAL units,另一种是 non-VCL NAL units。
每一个VCL NAL unit携带一片编码的图片数据而non-VCL NAL units携带控制信息(通常是与多个编码的图片相关的控制信息)。
一个编码的图片加上与其相关的non-VCL NAL units被称为一个HEVC access unit。

mp4中,对h264/h265来说,sps/pps/vps都包含在extra data中。
h264, extra data存在于trak->mdia->minf->stbl->stsd->avc1->avcc,语法遵循 AVCDecoderConfigurationRecord
而对ts流,extra data就是一个NALU

VP8
VP9

基础概念

分辨率

视频分辨率是指视频成像产品所形成的图像大小或尺寸,通常来说,1080P 就是指 1080 x 1920 的分辨率,4 k 指 3840 x 2160 的分辨率。

码率

bitrate:比特率(码率),秒为单位。等于视频总的大小/时长。指单位时间内传输或处理的比特的数量,单位为 bps(bit per second)也可表示为 b/s。比特率越高,单位时间传送的数据量(位数)越大。多媒体行业在指音频或视频在单位时间内的数据传输率时通常使用码率,单位是 kbps。
固定码率
可编码率

fps/frames

  1. frames:视频帧数
  2. fps:帧率(frame per second) 。一般来说 30fps 就是可以接受的,但是将性能提升至 60fps 则可以明显提升交互感和逼真感。超过 75fps 一般就不容易察觉到有明显的流畅度提升了,如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了

时间维度

  1. total_time:时间长度,ms为单位。等于duration/timescale
  2. timescale:时间的粒度,1000表示1000个单位为1s
  3. duration:时间粒度的个数
  4. videosamplenum:视频sample的个数

SAR/PAR/DAR

  1. PAR - pixel aspect ratio,单个像素的宽高比,大多数情况像素宽高比为1:1,也就是一个正方形像素,如果不是1:1, 则该像素可以理解为长方形像素。常用的PAR比率有(1:1,1
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。关于通过UDP传输音视频,我了解一些相关的知识,下面是一些学习笔记: 1. gstreamer是一个流媒体框架,用于创建、处理和播放多媒体流。它支持多种音视频格式,可以通过插件扩展功能。 2. 通过gstreamer可以使用UDP协议传输音视频数据。UDP协议是一种无连接的协议,不保证数据传输的可靠性和顺序性,但是传输效率高。 3. 首先需要创建一个gstreamer的pipeline,包括音视频源、编码器、UDP发送端等组件。例如: ``` gst-launch-1.0 -v filesrc location=test.mp4 ! decodebin ! x264enc ! rtph264pay ! udpsink host=192.168.1.100 port=5000 ``` 这个pipeline的作用是从test.mp4文件读取音视频流,解码后使用x264编码器进行压缩,然后使用rtph264pay将数据打包成RTP数据包,最后通过udpsink发送到指定的IP地址和端口。 4. 接收端需要创建一个gstreamer的pipeline,包括UDP接收端、解包器、解码器等组件。例如: ``` gst-launch-1.0 -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! autovideosink ``` 这个pipeline的作用是从UDP端口5000接收音视频数据,使用rtpjitterbuffer解决网络抖动问题,使用rtph264depay将RTP数据包解包成原始的H.264数据流,然后使用avdec_h264解码器进行解码,最后使用autovideosink播放视频。 5. 在实际使用过程中,还需要考虑数据的带宽限制、网络延迟等问题,以保证音视频传输的效果。 希望这些笔记能对你有帮助。如果你还有其他问题,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值