《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
完整开源地址:https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF
| 名称 | 机构 | 支持的视频编码 | 支持的音频编码 | 使用领域 |
|---|---|---|---|---|
| AVI | 微软 | 几乎所有格式 | 几乎所有格式 | BT 下载影视 |
| MP4 | MPEG | MPEG-4 , H.264 , H.263 等 | AAC , MPEG-1 等 | 互联网视频网站 |
| FLV | Adobe | VP6 , H.264 | MP3 , AAC 等 | 互联网视频网站 |
| MKV | CoreCodec | 几乎所有格式 | 几乎所有格式 | 互联网视频网站 |
| RMVB | Real Networks | RealVideo 8 , 9 , 10 | AAC , Cook Codec | BT 下载影视 |
编码格式
编码的目的在于通过压缩算法降低数据量,提高数据的存储和传输效率。视频编码是将视频像素数据( RGB , YUV 等)压缩成为视频码流。音频编码是将音频采样数据( PCM 等)压缩成为音频码流。
主要视频编码格式:
| 名称 | 机构 | 推出时间 | 使用领域 |
|---|---|---|---|
| H.265 | MPEG/ITU-T | 2013 | 研发中 |
| H.264 | MPEG/ITU-T | 2003 | 各个领域 |
| MPEG4 | MPEG | 2001 | 小众 |
| MPEG2 | MPEG | 1994 | 数字电视 |
| VP9 | 2013 | 研发中 | |
| VP8 | 2008 | 小众 |
主要音频编码格式:
| 名称 | 机构 | 推出时间 | 使用领域 |
|---|---|---|---|
| AAC | MPEG | 1997 | 各个领域 |
| AC-3 | Dolby | 1992 | 电影 |
| MP3 | MPEG | 1993 | 早期普及 |
| WMV | 微软 | 1999 | Windows |
音视频解码流程

- 解封装格式。将输入的按照一定格式封装的音视频数据,分离成为音频流压缩编码数据和视频流压缩编码数据。
- 解码。将视频和音频的压缩编码数据,解码成为非压缩的视频和音频原始数据。视频压缩数据通过解码输出为像素数据,如 YUV420P 、 RGB 等;音频压缩数据通过解码输出为非压缩的音频抽样数据,如 PCM 数据。
- 音视频同步。同步解码出来的视频和音频数据,并将音视频数据送至系统的声卡和显卡,播放和显示出来。
FFmpeg 函数库
FFmpeg 一般有 8 个函数库,各个函数库的功能如下:
| 函数库 | 功能 |
|---|---|
| avcodec | 音视频编解码 |
| avdevice | 多媒体设备输入输出 |
| avfilter | 滤镜特效 |
| avformat | 封装格式处理 |
| postproc | 后加工 |
| avutil | 工具库 |
| swresample | 音频采样数据格式转换 |
| swscale | 视频像素数据格式转换 |
FFmpeg 音视频解码
FFmpeg 音视频解码主要流程代码描述:
1. av_register_all() //注册组件
2. avformat_alloc_context //获取封装格式上下文
3. avformat_find_stream_info //获取输入文件信息
4. avcodec_find_decoder //获取解码器
5. avcodec_open2 //打开解码器
6. avcodec_decode_video2 或 avcodec_decode_audio4 //解码音视频帧
在 AS 工程中引入 FFmpeg 8 个动态库和 libyuv (负责视频像素数据格式转换)动态库。
工程的头文件目录:

工程的动态库目录:

Java 层 API :
package com.haohao.ffmpeg;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.util.Log;
import android.view.Surface;
/**
- author: haohao
- time: 2017/12/19
- mail: haohaochang86@gmail.com
- desc: AVUtils
*/
public class AVUtils {
private static final String TAG = “AVUtils”;
private static AVCallback AVCallback;
private static AVCallback sAVCallback;
public static void registerCal

最低0.47元/天 解锁文章
5472

被折叠的 条评论
为什么被折叠?



