音视频
文章平均质量分 58
Louis_815
我很懒,我是小菜鸟
展开
-
ffmpeg必知道的知识点
ffmpegFFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图...转载 2018-03-19 18:54:31 · 273 阅读 · 0 评论 -
ffmpeg实战教程(一)Mp4,mkv等格式解码为h264和yuv数据
FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。而网上对这些功能的使用大多是基于命令行的。这不利于我们深入学习定制化ffmpeg,今后我将写一系列的用代码实现这些功能的教程供大家学习。这系列的前部分我打算写在windows上的实现,后部分写移植到Android系统上实现。 代码实现的前提是对ffmpeg源码有一定的了解,如果你不了解可以看这里 ffmpeg源码...转载 2018-03-21 08:04:44 · 1208 阅读 · 0 评论 -
FFMPEG 在vs2010中的环境配置
从官网上下载ffmpeg最新的版本。网址为http://ffmpeg.zeranoe.com/builds/。例如我需要的是64-bitBuilds (Shared)和64-bit Builds (Dev),版本号要相对应。64-bit Builds (Shared)主要包含了所要用到的dll文件,64-bit Builds (Dev)主要包含了所要用的头文件和lib文件。其实这些lib并不是传统...转载 2018-03-21 08:11:26 · 464 阅读 · 2 评论 -
ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器
我们先实现用SDL播放YUV数据先来了解一下基本概念SDL基本函数: [初始化] * SDL_Init(): 初始化SDL。 * SDL_CreateWindow(): 创建窗口(Window)。 * SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。 * SDL_CreateTexture(): 创建纹理(Texture)。[循环渲染数据] * SDL_Update...转载 2018-03-21 08:12:41 · 276 阅读 · 0 评论 -
ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC
音频PCM采样数据编码为压缩码流(MP3,WMA,AAC等)简单介绍一下流程中各个函数的意义:av_register_all():注册FFmpeg所有编解码器。avformat_alloc_output_context2():初始化输出码流的AVFormatContext。avio_open():打开输出文件。av_new_stream():创建输出码流的AVStream。avco...转载 2018-03-21 08:14:29 · 444 阅读 · 0 评论 -
ffmpeg实战教程(四)格式转换如MP4转MKV等
知识延伸:I,P,B帧和PTS,DTS的关系基本概念:I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余...转载 2018-03-21 08:15:19 · 2577 阅读 · 0 评论 -
ffmpeg实战教程(五)libswscale,libavfilter实践指南
1.libswscale实现YUV转RGBlibswscale里面实现了各种图像像素格式的转换。libswscale使用起来很方便,最主要的函数只有3个: (1) sws_getContext():使用参数初始化SwsContext结构体。 (2) sws_scale():转换一帧图像。 (3) sws_freeContext():释放SwsContext结构体。 其中sws_getContext...转载 2018-03-21 08:16:32 · 484 阅读 · 0 评论 -
FFmpeg学习4:音频格式转换
前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式的,所以通过FFmpeg解码出来的数据不能直接发送到SDL进行播放,需要进行一个格式转换。通过网上一些资料,也能够正确的播放音频了,但是对具体的音频转换过程不是很了解,这里就对FFmpeg的对音频的存...转载 2019-06-21 09:55:39 · 1410 阅读 · 0 评论 -
ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()
libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。 libswscale常用的函数数量很少,一般情况下就3个:sws_getContext():初始化一个SwsContext。sws_scale():处理图像数据。sws_freeContext():释放一个SwsContext。其中sws_getContext()也可以用sws_get...转载 2018-03-20 10:02:53 · 773 阅读 · 0 评论 -
ffmpeg源码简析(九)av_log(),AVClass,AVOption
1.av_log()av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av_log()函数。一般情况下FFmpeg类库的源代码中是不允许使用printf()这种的函数的,所有的输出一律使用av_log()。 av_log()的声明位于libavutil\log.h,如下所示。void av_log(void *avcl, int level, ...转载 2018-03-20 10:01:36 · 499 阅读 · 0 评论 -
ffmpeg源码简析(一)结构总览
感谢雷神,中国音视频技术领域无私的拓荒者传承者,您的博文治学态度令我敬佩,文章使我受益良多 本系列前办部分应该是对雷神和其他资料的总结。 如果对ffmpeg不了解的客官进这里 ffmpeg必知道的知识点 :http://blog.csdn.net/king1425/article/details/70348374ffmpeg API变更雷神记录获取媒体信息使用的函数是av_find_stream_...转载 2018-03-20 09:43:39 · 457 阅读 · 0 评论 -
ffmpeg源码简析(二)av_register_all(),avcodec_register_all()
av_register_all()该函数在所有基于ffmpeg的应用程序中几乎都是第一个被调用的。只有调用了该函数,才能使用复用器,编码器等。av_register_all()调用了avcodec_register_all()。avcodec_register_all()注册了和编解码器有关的组件:硬件加速器,解码器,编码器,Parser,Bitstream Filter。av_register_...转载 2018-03-20 09:53:43 · 2240 阅读 · 0 评论 -
ffmpeg源码简析(三)av_malloc(),AVIOContext,AVFrame,avio_open2()等
内存操作的常见函数位于libavutil\mem.cav_malloc()av_malloc()是FFmpeg中最常见的内存分配函数。av_malloc()的代码可以简化成如下形式。void *av_malloc(size_t size) { void *ptr = NULL; /* let's disallow possibly ambiguous cases */ ...转载 2018-03-20 09:54:36 · 785 阅读 · 0 评论 -
ffmpeg源码简析(四)avcodec_find_encoder(),avcodec_open2(),avcodec_close()
avcodec_find_encoder()和avcodec_find_decoder()avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。 avcodec_find_encoder()的声明位于libavcodec\avcodec.havcodec_find_encoder()的源代码位于libav...转载 2018-03-20 09:55:31 · 2409 阅读 · 0 评论 -
ffmpeg源码简析(五)编码——avformat_alloc_output_context2(),avcodec_encode_video2()
1.avformat_alloc_output_context2()在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\avformat.h,如下所示。int a...转载 2018-03-20 09:56:32 · 601 阅读 · 0 评论 -
ffmpeg源码简析(六)编码-av_write_frame(),av_write_trailer()
1.av_write_frame()av_write_frame()用于输出一帧视音频数据,它的声明位于libavformat\avformat.h,如下所示。int av_write_frame(AVFormatContext *s, AVPacket *pkt); 1简单解释一下它的参数的含义: s:用于输出的AVFormatContext。 pkt:等待输出的AVPacke...转载 2018-03-20 09:57:28 · 502 阅读 · 0 评论 -
ffmpeg源码简析(七)解码-avformat_open_input,avformat_find_stream_info()
1.avformat_open_input打开媒体的的过程开始于avformat_open_input,因此该函数的重要性不可忽视。在该函数中,FFMPEG完成了:输入输出结构体AVIOContext的初始化;输入数据的协议(例如RTMP,或者file)的识别(通过一套评分机制):1判断文件名的后缀 2读取文件头的数据进行比对;使用获得最高分的文件协议对应的URLProtocol,通过函数...转载 2018-03-20 09:58:49 · 446 阅读 · 0 评论 -
ffmpeg源码简析(八)解码 av_read_frame(),avcodec_decode_video2(),avformat_close_input()
1.av_read_frame()av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况...转载 2018-03-20 09:59:52 · 915 阅读 · 0 评论 -
FFmpeg 被声明为已否决 deprecated
不用再取消SDL检查,不用再添加#pragma warning(disable :4996),下面才是正确的解决方法!!以下是一些常见的deprecated问题,遇到下述没有列出的问题,可以打开相应的头文件,在里面搜索ctrl+F,会有英文说明的,如下:PIX_FMT_YUV420P -> AV_PIX_FMT_YUV420P'AVStream::cod...转载 2019-06-25 10:29:25 · 1057 阅读 · 0 评论