x264

视频直播技术中编码的优化

我们两清 提交于 2020-03-25 10:51:26
3 月,跳不动了?>>> 音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工程优化和对各组件非常熟悉的掌握。下面整理几个简单常用的调优技巧,今天先给大家介绍编码如何优化? 编码优化 1. 确保 Codec 开启了最低延迟的设置。 Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显。很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频( 176 × 144 )一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧。对于第一帧的读取来说,这是一个很大的延迟。如果你的视频不是使用 H.264 来编码压缩的,确保没有使用到 B 帧,它对延迟也会有较大的影响,因为视频中 B 帧的解码依赖于前后的视频帧,会增加延迟。 2. 编码器一般都会有码控造成的延迟,一般也叫做初始化延迟或者视频缓存检验器 VBV 的缓存大小,把它当成编码器和解码器比特流之间的缓存,在不影响视频质量的情况下可以将其设置得尽可能小也可以降低延迟。 3. 如果是仅仅优化首开延迟,可以在视频帧间插入较多的关键帧,这样客户端收到视频流之后可以尽快解码。但如果需要优化传输过程中的累计延迟,尽可能少使用关键帧也就是 I 帧( GOP 变大),在保证同等视频质量的情况下, I 帧越多,码率越大,传输所需的网络带宽越多

直播音视频移动端实时延迟优化技术

橙三吉。 提交于 2020-03-12 11:17:42
实际上,音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工程优化和对各组件非常熟悉的掌握。这里面我们分享几个简单而常用的调优技巧。 1 、编码优化 1 、确保 Codec 开启了最低延迟的设置。Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显。很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频(176 × 144)一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧。对于第一帧的读取来说,这是一个很大的延迟。如果你的视频不是使用 H.264 来编码压缩的,确保没有使用到 B 帧,它对延迟也会有较大的影响,因为视频中 B 帧的解码依赖于前后的视频帧,会增加延迟。 2 、编码器一般都会有码控造成的延迟,一般也叫做初始化延迟或者视频缓存检验器 VBV 的缓存大小,把它当成编码器和解码器比特流之间的缓存,在不影响视频质量的情况下可以将其设置得尽可能小也可以降低延迟。 3 、如果是仅仅优化首开延迟,可以在视频帧间插入较多的关键帧,这样客户端收到视频流之后可以尽快解码。但如果需要优化传输过程中的累计延迟,尽可能少使用关键帧也就是 I 帧(GOP 变大),在保证同等视频质量的情况下,I 帧越多,码率越大,传输所需的网络带宽越多,也就意味着累计延迟可能越大

ms windows 中类似linux文件映射的命令 mklink

安稳与你 提交于 2020-03-10 11:53:38
有些时候,比如用phpStudy测试js时,不能使用含有中文的路径,复制又麻烦,此时用mklink命令就好了 D:\Temp>mklink /j xxx X:\中文目录\aaa 以上命令的意思是:将X:\中文目录\目录下的aaa目录,映射到d:\Temp\下的xxx目录 注意:先不要在d:\Temp\下建立xxx,运行后会自动生成xxx目录 1.mklink命令 格式:MKLINK [[/D] | [/H] | [/J]] 链接名称 目标 语法介绍: win+r--> cmd -->输入 mklink ##建立d:develop链接目录,指向远程的目标服务器上的e盘的对应目录。 mklink /d d:\develop \\138.20.1.141\e$\develop ##建立d:develop链接目录,指向远程的目标服务器上的e盘的对应目录。 mklink /d d:\recivefiles \\138.20.1.141\e$\recivefiles #删除虚拟的链接目录,并不会删除远程文件夹真实文件,注意千万不能用del,del会删除远程的真实文件。 rmdir d:\recivefiles rmdir d:\develop 命令区别: /d 给目录创建符号链接,简称符号链接、软链接; /h 创建硬链接,简称硬链接; /j 给目录创建联接点,简称软链接。

虚拟机文件系统混乱?

别等时光非礼了梦想. 提交于 2020-03-05 10:05:04
昨日编译x264,运行autogen.sh就出错。晚上回家一看,x264根本没有这个文件。 编译ffmpeg,一直没编译成功so。提示打开文件太多。今天从备份中恢复目录,成功编译。 这些错误应该不是我干的。那就是文件系统出错了? 来源: CSDN 作者: 柳鲲鹏 链接: https://blog.csdn.net/quantum7/article/details/104667728

手把手教你在Windows下使用MinGW编译libav

五迷三道 提交于 2020-03-01 14:34:15
手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言开发的,不可避免的,libav源码使用了一些gcc的特性,那么在Windows下很难使用VC编译,但是使用MinGW编译却简单多了,下面我将根据自己的经历逐步介绍使用MinGW编译libav的过程以及在此过程中遇到的问题及其解决方法。 1 安装MinGW编译环境 1.1 安装MinGW l 下载和运行最新的mingw-get-inst版本。 l 选择安装MinGW的目录,注意:安装目录的路径中不能包含空格符。 l 安装可选的组件:C++编译器、Forthan编译器、Objective-C编译器、Ada编译器和MSYS。 图1:选择需要安装的组件 由于我们需要使用MinGW编译libav,因此除了C编译器之外,还需要选择C++编译器和MSYS,如图1所示。 接下来,安装程序会下载并运行mingw-get CLI安装程序安装GCC 。取决于你的网络状况,这个过程可能会持续数分钟。在使用MinGW之前,请将${MinGWDir}\bin添加到PATH环境变量,其中${MinGWDir}是MinGW的安装目录,默认情况下${MinGWDir}=C:\MinGW。 安装完成后,打开开始菜单 ->程序 -> MinGW -> MinGW Shell,运行MinGW。 1.2 安装coreutils

x264阅读记录-1

*爱你&永不变心* 提交于 2020-01-26 17:41:48
x264阅读记录-1 采用x264版本是x264-snapshot-20060316-2245。 1. main函数 x264的main函数位于x264.c中,下面是main函数调用情况: (1)_setmode函数和_fileno函数 这两个函数是微软提供的两个库函数。 _setmode函数位于io.h文件中,主要作用是设置特定模式匹配的文件。http://msdn.microsoft.com/zh-cn/library/vstudio/tw4k6df8.aspx _fileno函数位于stdio.h文件中,用于获取文件流所对应的描述符。http://msdn.microsoft.com/zh-cn/library/vstudio/zs6wbdhx.aspx 下面的语句主要实现的是将Windows下默认的Text模式,按需要设置为BINARY模式, _setmode ( _fileno ( stdin ), _O_BINARY ); 还有一点,这个语句位于预编译命令中,其中涉及到一个宏 _MSC_VER。这个宏是VC编译环境的预定义宏,主要是计算为编译器的主版本号和次版本号元素。 专业数字为句点分隔的版本号的第一个元素,并且该次版本号是第二个元素。 因此,如果Visual C++编译器的版本号为15.00.20706.01,_MSC_VER 宏计算结果为1500。在 Visual

x264命令行工具(x264.exe)源码整体分析

夙愿已清 提交于 2020-01-24 10:16:39
该命令行工具调用的是libx264,就是一个使用该库的示例程序 X264 命令行工具的源代码 在x264中的位置如下图所示(红框里面的)。 X264命令行工具的源代码的调用关系如下图所示。 Additionally the x264opts and x264-params private options allows one to pass a list of key=value tuples as accepted by the libx264 x264_param_parse function. 最关键的API包括: x264_param_default():设置参数集结构体x264_param_t的缺省值。 x264_encoder_open():打开编码器。 x264_encoder_headers():输出SPS,PPS,SEI等信息。 x264_encoder_encode():编码输出一帧图像。 x264_encoder_close():关闭编码器。 循环中调用getopt_long()逐个解析输入的参数,并作相应的处理; parse()的流程: (1)调用x264_param_default()为存储参数的结构体x264_param_t赋默认值 (2)调用x264_param_default_preset() 设置preset,tune (3

ffmpeg与H264编码指南

喜夏-厌秋 提交于 2020-01-19 04:38:22
注:本文属于转载译文,原文地址:http://blog.csdn.net/vblittleboy/article/details/8982857。 英文地址: https://trac.ffmpeg.org/wiki/Encode/H.264 。内容有一定出入,但是可以借鉴学习。 x264是一个 H.264/MPEG4 AVC 编码器,本指南将指导新手如何创建高质量的H.264视频。 对于普通用户通常有两种码率控制模式:crf(Constant Rate Factor)和Two pass ABR。码率控制是一种决定为每一个视频帧分配多少比特数的方法,它将决定文件的大小和质量的分配。 如果你在编译和安装libx264 方面需要帮助,请查看ffmpeg和x264编译指南: http://ffmpeg.org/trac/ffmpeg/wiki/CompilationGuide crf(Constant Rate Factor) : 该方法在输出文件的大小不太重要的时候,可以使整个文件达到特定的视频质量。该编码模式在单遍编码模式下提供了最大的压缩效率,每一帧可以按照要求的视频质量去获取它需要的比特数。不好的一面是,你不能获取一个特定大小的视频文件,或者说将输出位率控制在特定的大小上。 1 选择一个CRF值 量化比例的范围为0~51,其中0为无损模式,23为缺省值,51可能是最差的

ffmpeg 和 x264的参数对照

给你一囗甜甜゛ 提交于 2020-01-19 04:34:59
ffmpeg 和 x264的参数对照 x264   ffmpeg   说明 命令行 字段 命令行 字段   qp qp_constant cqp   cqp 固定量化因子。取值范围 0 到 51 。 经常取值在 20-40 之间,越小质量 越好 , 要求的码率越高。 0 表示无损压缩 max-keyint i_keyint_max g gop_size 关键帧的最大间隔帧数 min-keyint i_keyint_min   keyint_min 关键帧的最小间隔帧数 level i_level_idc   level 取值范围 10-51 。 设置比特流的 Level 。默认 40 ,即 4.0 。 用来告诉解码器需要支持的什么级别的 兼容性。只有在你知道自己在做什么的 时候才设置该参数。 frameref i_frame_reference   refs B 和 P 帧向前预测参考的帧数。取值范 围 1-16 。 该值不影响解码的速度,但是越大解码 所需的内存越大。这个值在一般情况下 越大效果越好,但是超过 6 以后效果就 不明显了。 bframes i_bframe   max_b_frames 最大 B 帧数 . b-adapt b_bframe_adaptive   b_frame_strategy 如果为 true ,则自动决定什么时候需要 插入 B 帧

x264源代码分析-转

北慕城南 提交于 2020-01-19 04:34:14
 相关说明: 1. 使用版本: x264-cvs-2004-05-11 2. 这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了. 3. 需要学习的知识: a) 编码器的工作流程. b) H.264的码流结构,像x264_sps_t,x264_pps_t等参数的定义基本上都完全符合标准文档中参数集的定义,抓住主要参数,次要参数也应该有所了解. c) 数学知识,对dct变换等与数学相关的知识的编程实现要有较好理解. d) C语言的知识.涉及到c语言的较多不经常用的特性,如函数指针数组,移位运算,结构体的嵌套定义等. e) 耐心,对h.264的复杂性要有清醒的认识. 3.参考资料: a) 新一代视频压缩编码标准-h.264/avc 毕厚杰主编,人民邮电出版社. b) 网上的流媒体论坛,百度,google等搜索引擎. 4. 阅读代码的方法: a) 较好的方法是利用vc的调试器,如果对某个函数感兴趣,可以将断点设置在它的前面.然后采用step into,step over等方法进去该函数一步步分析.当然本身要对程序执行流程要有较清楚认识,不然不知道何时step into,何时step over. b) 建议应该先对照标准弄清各个结构体成员的意义. 源代码主要过程分析: 1. 进入x264