![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FFmpeg
qw_stone
文不能测字,武不能防身
展开
-
libx264编码流程
原因:发现在调用编码时没有指定帧的pts值,故单独调用libx264模块在此验证pts值的影响概述:首先编译libx264源码,将生成的lib和.h文件加载的工程中进行调用。流程:1:首先定义x264_param_t对象,该对象主要用于配置编码器参数信息。其中不同的preset和tune以及profile内部将会配置不同的参数信息,最终实现编码速度和编码质量的平衡。//设置pre...原创 2020-04-15 16:45:08 · 765 阅读 · 0 评论 -
x264码率控制
原因:在做视频编码时,当我们给定编码器一个目标码率的时候,编码器内部是怎么达到码率要求的那概况:关于码率控制有两个目的,第一:兼容传输,播放条件。第二:获取更高的视频质量。码率控制分为两类:CBR:constant bit rate,固定码率。 VBR:variable bit rate 可变码率。VBR:可变码率是一类码率控制算法的统称,他们的特点是局部的码率可变的,常用的可变码率子...原创 2020-01-17 16:04:38 · 279 阅读 · 0 评论 -
yuv图像拼接
原因:有人问过说yuv如何拼接,当时只是说对应内存进行拷贝,没有充分考虑数据的类型,故在此编写测试程序进行验证概况:不同的数据源,找到对应的yuv数据,然后进行对应拷贝。测试源数据:YUV420P(又分为YU12和YV12),plane平面模式,y,u,v分量分别存放不同平面。首先是所有Y值,然后是所有V值,最后是所有U值.YUV420SP(NV12和NV21),two-plane...原创 2019-11-05 14:07:30 · 2143 阅读 · 2 评论 -
RTP解析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-16 16:42:11 · 686 阅读 · 0 评论 -
SoundTouch与ZynAddSubFX
说明:由于需要涉及到音频特效调研,故通过调研发现SoundTouch基本满足需求.而如果需要实现音频特效则使用到了ZynAddSubFx模块,故在此介绍一下使用方法.概况:通过SoundTouch的源码生成解决方案,通过编写的测试程序调用生成的lib验证实现Tom猫效果.通过ZynAddSubFx源码生成解决方案,通过编写测试程序调用生成的lib验证特效.SoundTouch:htt...原创 2019-10-12 14:29:35 · 239 阅读 · 0 评论 -
FFmpeg RTSP拉流源码分析
原因:由于需要分析RTSP拉流细节,故在此通过FFmpeg进行源码分析。概述:首先利用VLC搭建RTSP服务器,客户端首先根据服务端提供的ip和端口进行TCP创建和连接,通过tcp进行发送RTSP需要的关键字,比如OPTIONS,DESCRIBE,SETUP,PLAY等,具体的RTSP流程交互可以参考另一个博客(live555的rtsp协议交互),通过rtsp交互获取远端的rtp和rtcp端口...原创 2019-09-29 17:15:41 · 3795 阅读 · 1 评论 -
利用nginx搭建RTMP与HLS服务器
原因:为了了解ffmpeg内部有关rtmp与hls的实现流程,故在此使用nginx搭建一个服务器用于进行数据转发,实现点播与直播功能。概述:系统win64,首先安装nginx进行配置,通过ffmpeg进行rtmp推流以及ffplay进行播放,同理hls通过通过ffmpeg进行推流与ffplay实现播放简单命令行如下:下面命令讲述了如何利用FFmpeg生成m3u8与ts文件,以及如何使用FF...原创 2019-09-30 17:43:27 · 558 阅读 · 0 评论 -
基于FFmpeg源码分析HLS拉流
原因:上个博客介绍了HLS的服务器搭建以及ffplay拉流播放,接下来分析ffmpeg针对hls处理的源码概述:首先通过http请求获取m3u8文件,通过解析m3u8文件获取切片最早的的ts文件获取常规的AVFormatContext信息。代码主要实现在hls.c文件.伪代码如下:可以看出针对hls的协议处理主要实现是在avformat_open_input中,具体细节接下来分析。A...原创 2019-10-08 18:41:05 · 1457 阅读 · 0 评论 -
m3u8文件格式解析
原因:上篇博客简单分析了一下FFmpeg针对HLS拉流的简单流程,其中可知重点为m3u8文件的获取以及解析,故在此分析m3u8文件格式。概述:用户通过RTMP协议将数据流推送到服务器,在服务器中通过转码器将RTMP协议转换成HLS协议,随后用户通过HLS协议进行拉流观看,转换成HLS的原因主要考虑为HLS的ABR切换,这就需要每个分片的起始的IDR帧在PTS上面必现要对齐如下:不同的分辨率对应...原创 2019-10-09 16:47:24 · 6897 阅读 · 0 评论 -
基于FFmpeg源码分析TS数据格式的解析
原因:前面简单分析了FFmpeg针对HLS协议和m3u8文件的简单调用,但是TS数据流的解析却没有介绍,故在此介绍一下TS流的数据格式及解析.概况:ts(transport stream)可以简单理解为传输文件,内部封装pes(packet elemental stream),而pes内部封装es(elemental stream)数据,而我们用于解码的数据即原始的es数据。可以简单理解为pe...原创 2019-10-10 18:10:28 · 1111 阅读 · 1 评论 -
avformat_open_input阻塞源码分析
原因:在进行RTP拉流时,会出现avforamt_open_input阻塞问题,故通过源码进行分析概况:avforamt_open_input默认为阻塞模式,可以通过三种方式进行设置阻塞返回,但是不同的阻塞环节,不同协议方式也不全部可行。下面三种方式的伪代码,接下来通过源码进行分析并给出解决方案。 int callback_cb(void *p) { return...原创 2019-09-27 15:45:36 · 1354 阅读 · 1 评论 -
FFmpeg RTP拉流分析
原因:由于上次简单分析了一下RTP推流,并创建了一个简单demo用于RTP推流,为了检测RTP推流故在此简单实现一个播放器用于播放RTP流.概述:通过url创建解码器,但是由于没有使用sdp作为信息传递,故解码器信息需要在接收到sps和pps后,才会被真实填充,通过获取的音视频的pts进行音视频通过,重点为pts的时间戳转换。下面进行伪代码分析:可以看出流程为常规流程,通过打开url获取对...原创 2019-09-26 18:27:06 · 3048 阅读 · 3 评论 -
pcm音频混音
原因:由于涉及到pcm的音频混音,故创建一个Demo进行混音测试,主要使用方法为归一化(自适应混音加权),平均调整权重法,自动对齐算法,及有人说的newlc中的一段算法,以上算法有可能名称叫法不同。平均调整权重法(平均法):不同的会话成员具有相同的权重,该方法虽然不会引入噪声,但是随着会话成员的增多,各路语音的衰减将愈加严重.自适应混音加权:使用可变的衰减因子对语音进行衰减,该衰减因...原创 2019-08-27 18:23:31 · 4783 阅读 · 0 评论 -
FFplay简单分析
原因:通过ffplay源码来分析音视频同步问题.介绍:1:线程主要分为:read_thread,audio_thread,video_thread,subtitle_thread,event_loop。 read_thread:主要用于读取源文件AVPacket数据并存放到对应的PacketQueue队列中. audio_thread:主要用于从audioq队列中中...原创 2019-08-23 18:30:07 · 335 阅读 · 0 评论 -
有关音频样本类型分析
原因:利用libfdk_aac进行音频转换后,会发现音频的样本类型前后被修改.在此进行分析libfdk和aac编码有关音频sample_format的区别.总的来说音频样本类型主要有如下几种enum AVSampleFormat { AV_SAMPLE_FMT_NONE = -1, AV_SAMPLE_FMT_U8, ///< unsigned 8...原创 2019-08-21 16:27:31 · 659 阅读 · 0 评论 -
libfdk_aac介绍
原因:由于需要对比aac编码和libfdk_aac编码后音频质量,故在此简单介绍一下libfdk_aac.音频简单介绍: 音频的主要几个参数为采样率,通道个数,通道类型,样本类型,码率等.我们的耳朵听到的频率间隔为20-20KHZ,我们的发声频率为100-3KHZ左右,所以可以看出如果只是单纯的采集发声频率可以使用8KHZ就可以,采样率必须是输入信号最高频率的2倍以上,这...原创 2019-08-16 17:32:01 · 11385 阅读 · 0 评论 -
windows平台FFmpeg源码编译
原因:由于需要对比音频编码效果,自带aac和fkd_aac,mp3lame的差别,故需要进行手动编译FFmpeg并包含fdk_aac,mp3lame.环境介绍:win7,64bit.vs2015.准备:1:安装MinGW:http://www.mingw.org/(在线安装),也可以选择本地安装(https://sourceforge.net/projects/mingwbun...原创 2019-08-13 18:28:29 · 1517 阅读 · 0 评论 -
利用FFmpeg简单分析帧类型
原因:由于看了一个区分帧类型的博客,故在此编写测试程序进行验证。概述:H264文件包含网络抽象层和视频编码层(VCL),网络抽象层负责按照特定格式化数据用于传输,视频编码层主要包含视频数据的内容,而视频编码层中又可以包含VCL类型(如I,P,B)和非VCL类型(如pps,sps),VCL类型中包含slice切片,而每个slice切片都包含head和body,通过head可以得知帧类型。分析...原创 2019-09-05 17:25:04 · 2629 阅读 · 0 评论 -
SDP信息格式分析
原因:由于webRtc媒体信息交互需要使用SDP数据格式,而且使用ffplay播放rtp数据流时需要首先获取SDP文件信息,故通过对比SDP信息进行分析.概述:SDP(Session Description Protocol)与其说是一个协议不如确切的说是一种文本封装格式,关于SDP的传输需要使用到其他协议传输,比如Http,RTSP等,SDP文本中主要包含会话信息和媒体信息,按照规定的格式...原创 2019-09-10 18:20:10 · 3062 阅读 · 0 评论 -
FFmpeg RTP推流源码分析
原因:由于需要涉及到RTP的推流分析,故调试查看FFmpeg内部实现流程文件类型:.264,.aac概况:FFmpeg首先通过sdp文件的创建,然后主要通过rtpenc.c文件和rtpenc_h264_hevc.c针对264文件进行内部进行格式封装。然后通过udp.c文件中进行发送.命令行如下:ffmpeg -re -i q.264 -vcodec copy -f rtp rtp...原创 2019-09-19 17:59:14 · 3130 阅读 · 3 评论 -
FFmpeg RTP拉流源码分析
原因:由于需要进行RTP拉流分析,故在此分析FFmpeg拉流流程.概况:FFmpeg通过url进行udp连通,然后通过sps和pps进行解码器参数初始化,然后进行解码。伪代码详细分析如下:由于输入文件可以是sdp文件,也可是url,故通过avformat_open_input简单分析可知通过输入文件类型,通过源码可以看出无论是文件操作还是协议操作都是定义为URLProtocol类型,...原创 2019-09-23 18:14:59 · 2009 阅读 · 1 评论 -
FFplay音视频同步分析
原因:由于上个文章只是简单分析了一下ffplay的流程,并没有分析音视频同步.故现在分析一下音视频同步。概况:通过下面代码分析,首先判断视频Frame_queue是否存在数据,如果存在则获取需要读取的视频帧为lastvp和下一帧数据vp,通过vp_duration方法计算出当前帧需要持续的理论时长.随后通过compute_target_delay计算出实际需要延迟的时间,通过当前时间与将...原创 2019-08-29 14:09:14 · 1096 阅读 · 0 评论