ffmpeg学习
想基于ffmpeg,做个android平台的播放器,这段时间一直在弄这个。和大家分享一下学习的情况吧!
一、ffmpeg概述
libavcodec 音视频编码或解码的核心代码
libavdeivce 操作计算机中常用的音视频捕获或输出设备:ALSA、AUDIO_BEOS、JACK等
libavfilter 音视频滤波器的开发,宽高比、裁剪、格式化、非格式化、伸缩等
libavformat 音视频流的格式解析,为libavcodec分析码流提供独立的音频或视频码流源
libavutil 实用工具库,包括算术运算、字符操作等
libpostproc 音视频应用的后处理,如图像的去块效应
libswscale 图像颜色空间或格式转换,如RGB的24、32等于YUV的420等之间的转换
一、初始化流程
首先自己想了想,如果要我做,怎么做?思路:找到音视频,解码,保存,音视频同步,输出到屏幕等,初步应该是这个思路吧!看了ffmpeg后,清楚大概流程应该为:
1、完成FFMPEG支持的编解码格式注册av_register_all,avcodec_register_all;
2、打开本地or网络服务端的多媒体文件av_open_input_file;
3、分别找音/视频的流索引ID信息av_find_stream_info;
4、根据ID信息寻找相应的解码器avcodec_find_decoder;
5、打开解码器avcodec_open;
6、开辟缓存avcodec_alloc_frame;
(7、开始对音/视频解码avcodec_decode_video;)
(7、图象进行 YUV 和 RGB之间的转换img_convert;)
二、openVideo打开视频
还是想想若是自己做,是个什么思路:要打开视频,即开始解码,再将解码后的音/视频输出显示即可,但是如何做到音视频同步了?思考,但是下载的源码中已经实现了同步,并且封装了,不能查看。
7、开始对音/视频解码avcodec_decode_video,即initVideo、initAudio;
8、用surfaceView类将视频显示;
三、startVideo播放视频
9、开缓存、读解码后的信息,读完后释放开辟的缓存。
以上是对播放视频流程的基本了解。