FFmpeg+SDL 学习笔记1,基础知识及平台配置搭建

一,视频播放器原理

播放一个视频文件流程如下:
流程

二,信息查看工具

  • 综合信息查看工具
    MediaInfo
  • 二进制信息查看
    UltraEdit
  • 单项详细描述
    封装格式:Elecard , Format , Analyzer
    视频编码数据:Elecard,Stream,Eye
    视频像素数据:YUV,Player
    音频采样数据:Adobe,Audition

三,视频格式

- 封装格式:AVI,MP4,ASF
-编码格式:H264,wmv,XviD(音频:acc Mp3)
- 封装格式的作用:
 视频码流和音频码流按照一定的格式存储在一个文件中。
- MPEG-4:
是一套用于音频、视频信息的压缩编码标准

- 封装格式分析工具:
 Elecard Format Analyzer封装格式
- MPEG2-TS格式简介:
不包含头文件,数据大小固定(188Byte)的TS packet构成。
- FLV格式简介:
包含头文件,数据大小由不固定的Tag构成。

视频编码数据

- 视频编码的作用:
将视频像素数据(RGB,YUV等)压缩为视频码流,从而降低视频的数据量。
在这里插入图片描述
- H.264格式简介:
数据由大小不固定的NALU构成。
最常见的情况下,1个NALU存储了1帧画面的压缩编码后的数据。
在这里插入图片描述
- H.264压缩方法:
比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节构成。
可以将图像数据压缩100倍以上。

四,音频编码数据

1. 音频编码的作用:
将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
在这里插入图片描述

2. AAC格式简介:
数据由大小不固定的ADTS构成。
在这里插入图片描述
AAC压缩方法可以将音频数据压缩10倍以上。

四,音频编码数据

1. 视频像素数据作用:
保存了屏幕上每个像素点的像素值。
2. 格式:
常见的有:RGB24,RGB32,YUV420P,YUV422P,YUV444P等。
压缩编码中一边拿使用的是YUV格式的像素数据,作为常见的格式为:YUV420P
3,特点:
视频像素数据体积很大,一般情况下1小时高清视频的RGB24格式的数据体积为(设帧率25Hz,采样精度8Bit):
3600*25*1920*1080*3 = 559.8GByte
4,RGB格式简介:
彩色图像中每个像素点由R、G、B三个分量组成。
以RGB24为例,图像像素数据的存储方式如下:
在这里插入图片描述
从图可知,RGB24以此存储了每个像素点的R、G、B信息。
RMB文件存储的就是RGB格式的像素数据。
5,YUV格式简介:
在这里插入图片描述

5,音频采样数据:

在这里插入图片描述

6,ffmpeg.exe的使用

1. 命令格式:
功能:ffmpeg.exe用于视频的转码。
ffmpeg -i input.avi -b:v 640k output.ts
将当前文件夹下的input.avi 文件转换为output.ts文件,并将output.ts 文件的码率设置为640k.
命令格式:ffmpeg -i 【输入文件路径】 -b:v 【输出视频码率】 【输出文件路径】
所有的参数都是以键值对应的形式指定的。
例如:输入文件参数是“-i” ,参数值是文件路径;输出视频码率参数是“-b:v”,而参数值是视频的码率值。
注意:位于最后面的输出文件路径前面不包含参数名称。
2. 命令参数:
命令参数

7,ffplay.exe的使用

1. 命令格式:
功能:用于视频的播放
ffplay input.avi
播放当前文件夹下的input.avi 文件。
命令格式:
ffplay [输入文件路径]
参数格式与ffmpeg.exe类似。所有的参数都是以键值对应的形式指定的(由于不包含输出文件,所以只能指定输入参数)

2. 快捷键:
q,ESC :退出
f : 全屏
p,空格 :暂停
鼠标点击屏幕 :跳转到指定位置

8,视频解码知识

- 纯净的视频解码流程:
压缩编码数据 --> 像素数据
例如解码H.264,就是“H.264码流 --> YUV”。
- 一般的视频解码流程:
视频码流一般存储在一定的封装格式中(MP4,AVI),通常还包含音频码流等内容。
对于封装格式中的视频,需要先从封装格式中提取视频码流,然后再进行解码。
例如:家=解码MKV格式的视频文件,就是“MKV – > H.264码流 --> YUV”.

9,ffmpeg开发环境的搭建

1. 新建控制台项目
打开VC++ -> 文件 -> 新建 -> 项目 -> Win32控制台项目
2. 拷贝ffmpeg开发文件
头文件(.h)拷贝到项目文件夹下的include子文件夹下
导入库文件(
.lib)拷贝至项目文件夹下的lib子文件夹下
动态库文件(*.dll)拷贝至项目文件夹下
3. 配置开发文件
1,打开属性面板:
2,头文件配置:
配置属性 ,C/C++,常规,附加包含目录,输入“include”(刚才拷贝的头文件的目录)
3. 导入库配置:
配置属性,链接器,常规,附加库目录,输入"lib"(刚才拷贝库文件的目录)。
配置属性,链接器,输入,附加依赖项,输入“avcodec.lib;avformat.lib;avutil.lib;avdevice.lib;avfilter.lib;postproc.lib;swresample.lib;swscale.lib”(导入库的文件名)
4. 动态库不用配置
4. 测试
1,创建源代码文件
在工程中创建一个包含main()函数的c/C++ 文件
2,包含头文件
C语言中使用ffmpeg,使用该代码:

#include “libavcodec/avcodec.h”
C++ 使用:
#define __SIDC_CONSTANT_MACROS
extern "C"
{
#include  “libavcodec/avcodec.h”
}

3,main()中调用一个FFmpeg的接口函数:

int main()
{
	printf("%s",avcodec_configuration());

	return 0;
}

//若运行无误,代表ffmpeg配置完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个开源的跨平台音视频处理工具,它可以用于音视频的解复用、解码和编码等操作。SDL是一个简单直接的多媒体输出库,用于显示音视频数据。在使用FFmpegSDL进行音视频处理时,通常有一些步骤需要注意。 首先,需要使用FFmpeg进行解复用和解码操作,可以参考FFmpeg提供的示例文件,比如demuxing_decoding.c文件用于解复用和解码操作。解复用是指将音视频流分离出来,解码是将音视频数据解码为原始的音频或视频数据。然后,可能需要进行分辨率调整,可以参考scaling_video.c文件中的代码。这部分操作主要是为了方便后续的显示操作。 其次,需要注意的是FFmpegSDL对采样格式的表示是不一样的。为了方便显示,需要将解析出来的YUV数据统一为某一种固定的格式。这一步通常由sws_scale函数完成,它可以进行颜色空间转换和图像缩放等操作。 至于为什么需要flush decoder操作,这是因为解码器可能会有一些缓存数据。当音视频流结束或切换时,需要将解码器中的缓存数据清空,以免影响后续的操作。 最后,如果想深入了解FFmpegSDL的更多细节,可以参考FFmpeg官方文档和相关学习资源,如https://www.jianshu.com/p/d77718947e21和http://www.ffmpeg.org/doxygen/4.1/index.html。这些资源可以帮助你更好地理解FFmpegSDL的使用和原理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FFmpeg+SDL纯视频播放器](https://blog.csdn.net/Lin3119333/article/details/122401809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ffmpeg + SDL 实现简单的视频播放器](https://blog.csdn.net/longjiang321/article/details/103499785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值