音视频学习H264系列:H264简介
音视频学习H264系列:H264视频编码原理基础分析
音视频学习H264系列:H264视频编码原理进阶分析
音视频学习H264系列:MediaCodec H264/H265解码
音视频学习H264系列:终结篇实战
序言
本篇是有关音视频学习系列中的H264 / H265的解码视频部分,文章大部分记录直接上干货,编码原理基础部分【音视频学习H264系列:H264视频编码原理】后续再补上。欢迎留言讨论。
使用MediaCodec 解码H264/H265码流视频,那必须谈下MediaCodec这个神器。附官网数据流程图如下:

input:ByteBuffer输入方;
output:ByteBuffer输出方;
- 使用者从MediaCodec请求一个空的输入buffer(ByteBuffer),填充满数据后将它传递给MediaCodec处理。
- MediaCodec处理完这些数据并将处理结果输出至一个空的输出buffer(ByteBuffer)中。
- 使用者从MediaCodec获取输出buffer的数据,消耗掉里面的数据,使用完输出buffer的数据之后,将其释放回编解码。
H264码流解码示例代码如下(基本都做了注释)
package com.zqfdev.h264decodedemo;
import android.media.MediaCodec;
import android.media.MediaFormat;
import android.util.Log;
import android.view.Surface;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
/**
* @author zhangqingfa
* @createDate 2020/12/10 11:39
* @description 解码H264播放
*/
public class H264DeCodePlay {
private static final String TAG = "zqf-dev";
//视频路径
private String videoPath;
//使用android MediaCodec解码
private MediaCodec mediaCodec;
private Surface surface;
H264DeCodePlay(String videoPath, Surface surface) {
this.videoPath = videoPath;
this.surface = surface;
initMediaCodec();
}
private void initMediaCodec() {
try {
Log.e(TAG, "videoPath " + videoPath);
//创建解码器 H264的Type为 AAC
mediaCodec = MediaCodec.createDecoderByType("video/avc");
//创建配置
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 540, 960);
//设置解码预期的帧速率【以帧/秒为单位的视频格式的帧速率的键】
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
//配置绑定mediaFormat和surface
mediaCodec.configure(mediaFormat, surface, null, 0);
} catch (IOException e) {
e.printStackTrace();
//创建解码失败
Log.e(TAG, "创建解码失败");
}
}
/**
* 解码播放
*/
void decodePlay() {
mediaCodec.start();
new Thread(new MyRun()).start();
}
private class MyRun implements Runnable {
@Override
public void run() {
try {
//1、IO流方式读取h264文件【

本文介绍使用Android MediaCodec解码H264和H265视频码流的方法,并提供示例代码。通过MediaCodec处理视频数据,实现视频解码和播放。

349

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



