ffmpeg开发播放器学习笔记 - 认识YUV

本文详细介绍了YUV编码方式及其在图像和视频中的应用。通过对比4:4:4、4:2:2、4:1:1、4:2:0四种不同采样方式,阐述了它们的压缩比和图像质量影响,并探讨了YUV的存储方式,包括打包和扁平存储。通过对YUV的深入学习,为后续的音视频处理打下基础。
摘要由CSDN通过智能技术生成

该节是ffmpeg开发播放器学习笔记的第三节《认识YUV》

简单的讲YUV是一种图像和视频的编码方式,RGB通过三种颜色来表达现实世界中的各种颜色,YUV通过亮度与色度饱和度来表示颜色。
RGB很好理解,它更直观。从学生开始就认识绘画的颜料是用三种颜色调配来的,汽车的油漆颜色也是RGB三种颜色调配而来的。
YUV的出现有它的历史意义但也是一种必然。它基于人眼对亮度的敏感度比色彩的敏感度更高的特点。Y表示亮度也可以理解在灰度值,最低的亮度就是黑色最高的亮度就是白色,中间的可呈现出灰色。
在黑白电视机向彩色电视机过渡的年代,黑白电视机只需要YUV中的一个分量Y就可以呈现出黑白画面。UV分量用在彩色电视机上即可呈现出彩色了。 YUV可以带来更高的帧内压缩比,由于人眼对黑白更敏感,YUV可以弱化不敏感的信息,减少UV分量的采样。RGB24的每个像素需要3*8个字节,YUV呢?不同的YUV采样方式压缩比有所不同。
电视信息使用的是YUV而数字信息使用的是YCrCb命令,以下统称YUV。
 

✅ 第一节 - Hello FFmpeg
✅ 第二节 - 软解视频流,渲染 RGB24
第三节 - 认识YUV
第四节 - 硬解码,OpenGL渲染YUV
第五节 - Metal 渲染YUV
第六节 - 解码音频,使用AudioQueue 播放
第七节 - 音视频同步
第八节 - 完善播放控制
第九节 - 倍速播放
第十节 - 增加视频过滤效果
第十一节 - 音频变声

该节 Demo 地址:

好的,针对您的问题,我来简单回答一下。 首先,要明确的是,FFmpeg 是一个开源的跨平台音视频处理库,支持包括解码、编码、封装、解封装等功能。而解封装(Demuxing)是指将音视频封装格式中的音视频流解析出来,以便后续对音视频流进行解码、编码等操作。 在 Android 基于 FFmpeg 开发简易播放器中,我们可以使用 FFmpeg 提供的 API 来进行解封装。具体步骤如下: 1. 打开输入文件 使用 FFmpeg 的 avformat_open_input() 函数打开要解封装的音视频文件,该函数返回一个 AVFormatContext 结构体指针,该指针包含了输入文件的相关信息。 2. 寻找音视频流 使用 FFmpeg 的 avformat_find_stream_info() 函数读取输入文件的文件头信息,并寻找其中包含的音视频流。该函数会将每个音视频流的信息保存在 AVStream 结构体中。 3. 选择音视频流 根据需要播放的音视频流类型,在所有寻找到的音视频流中选择对应的流。可以通过判断 AVStream 结构体中的 codecpar->codec_type 来确定该流是音频流还是视频流。 4. 获取解码器 使用 FFmpeg 的 avcodec_find_decoder() 函数获取对应的解码器,并使用 avcodec_open2() 函数打开解码器。 5. 循环读取数据包 使用 FFmpeg 的 av_read_frame() 函数循环读取音视频数据包(AVPacket 结构体),并将数据包送到解码器进行解码。 6. 关闭解码器和输入文件 在播放完成后,需要使用 avcodec_free_context() 函数释放解码器占用的资源,并使用 avformat_close_input() 函数关闭输入文件。 以上就是基于 FFmpeg 进行解封装的大致步骤。当然,在实际开发中还有很多细节需要注意,比如错误处理、内存管理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值