FFmpeg-之音视频解码与音视频同步(二)

《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 Google 2013 研发中
VP8 Google 2008 小众

主要音频编码格式:

名称 机构 推出时间 使用领域
AAC MPEG 1997 各个领域
AC-3 Dolby 1992 电影
MP3 MPEG 1993 早期普及
WMV 微软 1999 Windows

音视频解码流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 解封装格式。将输入的按照一定格式封装的音视频数据,分离成为音频流压缩编码数据和视频流压缩编码数据。
  2. 解码。将视频和音频的压缩编码数据,解码成为非压缩的视频和音频原始数据。视频压缩数据通过解码输出为像素数据,如 YUV420P 、 RGB 等;音频压缩数据通过解码输出为非压缩的音频抽样数据,如 PCM 数据。
  3. 音视频同步。同步解码出来的视频和音频数据,并将音视频数据送至系统的声卡和显卡,播放和显示出来。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值