版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、百度文库让每个人平等地捉升口我音视频编码说明1音视频编码参数1.1音频编码参数音频编码格式采用AAC格式,其参数设置比较简单,主要设置参 数如下:(1) 音频样本格式的设置c-samp1e_fmt = AV_SAMPLE_FMT_S16;sample_fmt是一个enum类型,包含了多种样本格式,样本格式的 设置应保持与Android应用层音频采样格式一致。此处,我们设置 为AV_SAMPLE_FMT_S 16, Android应用层采样格式也是16位的 ENCOD IXG_PCM_16BIT 格式。(2) 音频码率设置c-bit_rate = 64000;此参数为应用层提供参数接口,由应用层
2、根据编码效果来设定。此处参考值为64000o(3) 音频采样率设置csample_rate = 44100;此参数为应用层提供参数接口,由应用层获取实际机型可用的采 样率来决定。采样率越低,音频效果越差,反之,越好。音频采样率 一般有8000,44100, 47250, 48000, 47250,32000, 11025, 16000, 22050等值,此处参考值为44100HZ,现在基木所有机器都支持44100 采样,而且音频效果也很好。(4)音频通道设置c-channels = 2;此参数为应用层提供参数接口,根据应用层需求来设置。当设置1时为单声道模式,设置2时为立体声道模式。此处参考值
3、为2.1.2视频编码参数视频编码参数相对音频编码参数复杂,其中一些参数关系到视频 编码的质量和编码速度,为此需要设置一套最优的参数以确保质量和 速度达到一个平衡点。(1)视频编码基木参数设置 DEC_ID_H264;视频编码格式采用H264格式。 c-width= 480;c-height= 480;width和height两个参数为应用层提供参数接口,根据具体需求来 设置编码后视频的大小,即最终视频的width和heighto应用层也可 以考虑通过调节width和height的大小来改变视频编码的速度,例如 480*320的大小比480*480的大小编码速度快很多。此处默认是 480*480
4、大小。 c-time_base. den = 15;c-time_base.num 二 1;这两个参数决定视频播放帧率,即每秒播放多少帧的视频, time_base. num固定为1, time_base. den为应用层提供参数接口。一 般应用层录取视频帧率和播放视频帧率一致。此参数的设置需要考虑 到编码速度的问题,经过反复测试,15帧/s是一个比较合适的值。 c-pix_fmt= AV_PIX_FMT_YUV420P;视频像素格式,采用AV_PIX_FMT_YUV420P格式。(2)重要参数设置以上视频参数是必须设置的基本参数,以下介绍的参数将会直接 影响到视频的质量和编码速度。详细如下:
5、 cthread_count编码线程数,将帧分块,由不同的线程去完成。此参数为应用层 提供参数接口,大小需要根据设备CPU核心数来动态设定。经过反复 测试,此处大小设置为thread_count=CPU核心数*1. 5时编码速度达 到比较好的水平。 opt_set_funcs系列函数的利用opt_set_funcs系列函数有以下10个:int av_opt_set (void *obj, const char *name, const char *val, int search.flags); int av_opt_set_int(void *obj, const char *name, in
6、t64_t val, int search.flags);int av_opt.set_double(void *obj, const char *name, double val, int search.flags); int av_opt_set_q(void *obj, const char *name, AVRational val, int search_flags);int av_opt_set.bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags);int av_opt_s
7、et_image_size (void *obj, const char *name, int w, int h, int search.flags); int av_opt_set_pixel.fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int 3百度文邮-让每个人平零地捉升口我search_flags);int av_opt_
8、set_vldeo_rate (void *obj, const char *name, AtTRational val, intsearch_flags);int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch.layout, int search_flags);我们可以在ffmpeg源码库libavutilopt. h查看函数的声明,目前 只用到前两个av_opt_set av_opt_set_int来设置x264里的一些编码 参数。 av_opt_set(cpriv_data, preset, ultra
9、fast, 0);通过preset参数可以设置编码速度的等级,preset的级别有ultrafast superfast veryfast faster fast medium、slow、 slower、veryslow placebo,从快到慢。其实,这里的每个参数 都是由一组x264参数设置组合而成。例如ultrafast参数是由以下 参数设置组合的:-ultrafast:Xn一一no8x8dct 一一aq-mode 0 badapt 0n一一bframes 0 一一nocabac -一no-deblocknz/一一no-mbtree 一一me dia no-mixedrefsn一-par
10、titions none -rc-lookahead 0 一-ref ln一一scenecut 0 一一subme 0 -一trellis 0n-no-weightb -weightp 0n这些参数可以在x264源码库里x264. c文件中查看到。大部分参 数的含义可以参看或者.preset参数为应用层也提供了参数接口,应用层根据编码速度和质量的进行选取合适的等级。经过反复测试,设置为ultrafast这个值,再配合其他参数参考值能达到最优效果。 av_opt_set(cpriv_data, x264opts, force-cfr,z, 0); 设置force_crf参数,此参数是设置tune
11、参数zerolatency值中 挖掘出来的。Zerolatency参数也是由一组参数组合而成,能起 到的作用是解决延迟问题,实现实时编码。其组合参数如下:- zerolatency: n,/一-bframes 0 一一forcecfr 一一no-mbtreen,/一一sync-lookahead 0 一-sliced-threadsn,/-rc-lookahead 0n其中有的参数与ultrafast中的参数重复,经过反复测试,设置 force_crf和设置tune值为zerolatency效果是一样的。 av_opt_set_int(c-priv_data, qp, qpValue, 0);
12、其中qpValue是一个int类型的值,qp表示固定量化因子,取值 范围0到51o经常取值在20-40之间,越小质量越好,要求的码 率越高,0表示无损压缩。此参数为应用层提供了参数接口,应 用层根据视频质量和编码速度来选取合适的大小。经过反复测试, 取值25能达到质量和速度的平衡。码率控制的方法有三种,出了 qp控制方法外还有bitrate及erf 方法。三种码率控制方法见下表1.控制方法QPbitrateerf默认值无无23设置x264使用固定 量化参数模式。给定 的数量将被作为P帧 的呈化参数,I帧和设置x264使用固定 目标比特率模式。固 立目标比特率意味 着最终文件的大小固左 rate
13、factoro QP是固定量化器, bitrate是固定文 件大小,erf则是固说明B帧的咼化参数由 -ipratioand-pbratio参数进一 步算岀。QP模式适用 固定的量化参数,这 意味着最终的文件 大小是不可知的(可 以通过一些其他方 法预测)。设置为0 将产岀无损的输出。 相同视觉质虽时,QP 模式产岀的文件比 erf模式大。QP模式 将关闭自适应量化 器,因为它是固定QP 的。这个选项和 -bitrate 和 -erf 是互斥的,三者只能 选一个。一般而言 erf都能代替QP模 式,不过QP因为完 全不需要预测所以 它会运行地更快些。是可知的,但是目标 的质量是不可知的。 x2
14、64会试图让最终 文件的整体码率与 给定的码率相等。通 常这个选项和 -pass选项配合进 行2趟编码。这个选 项和-qp和-erf 是互斥的,三者只能 选一个。泄“质量” o erf可 以提供跟QP 一样的 视觉的质量,但是文 件更小。erf的单位 是 ratefactor。 erf 是通过降低那些“不 那么重要”的帧的质 量做到这一切的。不那么重要”意思 是过于耗费码率又 难以用肉眼察觉的 帧,比如复杂或者超 髙速运行的场景。省 下来的码率会用在 其它更有效的帧里。 erf编码比2趟编码 快,因为它相当于省 略了第1趟编码。所 以erf的最终码率 也是不可预测的。项目中参考值25W*h*1
15、5*2*0. 07无衣1.三种码率控制方法对比说明:起初使用的码率控制方法是bitrate固定码率的方法,其 取值为W*h*15*2*0. 07是参考doubango计算方法,其中w是视频图 像的宽,h是视频图像的高,15是帧率,2是中等质量等级,0.07 个权重系数,经过反复测试取此值达到速度与质量平衡时的速度并不 是非常满意,为了寻求更快的编码速度,测试了 qp方法和erf方法。测试erf方法采用默认值23时,速度比较慢,取值增大时质量也变 得很差,因此没有找打一个好的平衡点,舍弃了此种方法。最终选取 了 qp控制方法,当取值为25时,在1. 2GHZ双核CPU测试手机(本 文中提到的测试
16、都是基于此设备的)上速度和质量达到预想效果,速 度接近15帧/s。13在开发中,这三种码率控制的方法应该根据实际需求来选取。13编码参数设置总结对于音频参数的设置比较简单,视频参数的设置比较难,主要是 因为要考虑到视频编码速度的问题。虽然之后的编码处理方面也会有 些问题会影响编码速度,但是设置好了编码参数也就成功了一大半 了。这些参数的设置都要根据实际的需求来设置,在没有经验的情况 下需要反复的测试,找到最合适的参数值。2编码设置完编码参数和初始化其他工作后,就可以把采集的音视频数据进行编码了。音频编码比较简单,在此不用介绍,下面主要介绍视频的编码工作。21视频编码的需求视频编码的需求如下:a
17、. 将移动设备采集来的视频数据像素格式转变为AV_PIX_FMT_YUV420P 类型的格式;b. 对视频图像大小进行裁剪成目标图片大小;c. 当设备由横屏变为竖屏录像时,需要对视频图像进行旋转操作;d. 最后对处理好的视频数据进行真正的编码,并写入文件。2.2像素格式转换(1) YUV420格式简介YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电 视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频 宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度 (Luminance或Luma),也就是灰阶值;而“U和V”表示的则是 色度(Chrominance或Ch
18、roma),作用是描述影像色彩及饱和度,用于 指定像素的颜色。采用YUV色彩空间的重要性是它的亮度信号Y和色度 信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样 表示的图像就是黑白灰度图像。其主要的采样格式有YCbCr 4:2:0、 YCbCr 4:2:2、YCbCr 4:1:1 和 YCbCr 4:4:4。,在此,只介绍项目用 到的YCbCr 4:2:0o4:2:0表示2:1的水平取样,没有垂直采样。现以图1来直观地表示 描述YCT420的采样方式,其中以黑点表示采样该像素点的Y分量,以 空心圆圈表示采用该像素点的UV分量例。1 O O O2 1 字节,即 1.5倍的widt
19、h*heighto 其中,Y分量: (640*480)个字节;U(Cb)分量:(640*4802)个字节;V(Cr)分量: (640*4802)个字节。(2) YUV420SP格式转YUV420P格式YUV420SP格式与YUV420P格式都是属于YUV420的格式,它们所占存 储空间大小都是width*height*l. 5,所不同的是UV两个分量的存储结 构。例如一个分辨率为8*4的YUV图像,其存储结构分别如图2、图3 所示。2Y2q丫嬖Y4Y5q伽Y7aY&4Y10pY11Y12YISp牛Y15 十16*Y17Y18Y19Y20Y21JY22Y2324Y25Y26Y27Y28Y2930
20、3132U2vzJU3V3U4“V4rU5V5U6V6usV8 1图2 .YW420SP格式存储结构图YY2pY4i5aY7Y8q4Y12Y14Y15eY16171920211Y22 :Y23Y2425Y2728Y29Y30Y31Y32UU3卩U4U5U6U7U8VI心V4/V5V6V7V8图3 .YUV420P格式存储结构图由图2、图3可以清楚的看到,Y分量的存储方式是一样的,但UV 两个分量在420SP格式和420P格式中存储方式完全不一样。在420SP 中,UV是交替出现的,而在420P中UV是U分量存储完后再存储V分量。 分析清楚了不同之处,然后将420SP转换为420P格式将会很简单
21、。其 转换算法代码如下:void YUV420SPToYUV420P ( uint8_t * yuv420sp, uint8_t * yuv420, int width, int height )int PixelsCount = width * height;int i = 0, j= 0;if (yuv420sp= NULL yuv420 = NULL)return;/copy Yfor (i = 0; i PixelsCount; i+)*(yuv420 +i) = *(yuv420sp + i);/copy Cb(U)i = 0;for(j = 0; j PixelsCount/2;
22、j+=2)*(yuv420 +(i+PixelsCount * 5/4) = *(yuv420sp + (j + PixelsCount);i+;/copy Cr(V)i = 0;for (j = 1; j left_band两个参数表示裁剪时从图像左上角进行多 少像素的裁剪。top_band是高度从上减少多少,left_band是宽度从 左减少多少。为了裁剪出图像中间的部分top_band=(src_heigth-dst_height)/2, left_band= (src_width-dst_width) /2.例如,640*480的图像要裁 剪成320*320的图像,其裁剪效果如图4所示
23、。f80-I啟1 J60320*32。图4视频裁剪示意图2.4视频旋转Android设备视频采样时是按照宽频来采样的,即设备默认横屏采 样的。后置摄像头横屏采样时图像正常不需旋转,当后置摄像头竖屏 录像时,生成的图像需要逆时针旋转90度;前置摄像头横屏时生成的 图像正常,竖屏时生成的图像需要逆时针旋转270度,即顺时针旋转 90度。经过测试发现,如果以被拍摄物的角度看前置和后置生成的图 像都是顺时针旋转90,因为前置摄像头拍摄的图片是镜像的。在数据 存储上,后置竖屏顺时针旋转90度,前置竖屏逆时针旋转90度。其旋 转示意图分别如图5、图6所示。123495156781062910111211731284图5.后置摄像头生成图片顺时针旋转90度示盘图123448125678371191011122610159图6.前置摄像头生成图片逆
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化学反应与能量变化说课稿
- 红眼睛绿眼睛说课稿
- 肥胖症的预防及其治疗
- 电器厂采光井施工合同
- 宠物行业税务管理
- 企业品牌宣传租赁合同
- 电商推广违约承诺书
- 化工原料出口招投标实习报告
- 酒店会议室建设施工合同建筑膜
- 教育设施招投标流程在线检验
- 保安培训记录内容
- 公务快艇常规安全
- 案例l五项目三:电动天窗系统的检测与故障排除
- 高中生活如何启航 课件 2023-2024学年高一主题班会
- 电力职业病防控
- 《互联网的应用》课件
- 2024年培养皿相关项目可行性分析报告
- 2024山东能源集团高校毕业生校园招聘笔试参考题库附带答案详解
- 初中九年级美术期末艺术测评指标试卷及答案
- 新能源科学与工程专业职业生涯规划
- 高考作文等级评分标准
评论
0/150
提交评论