返回

ijkplayer源码分析(3)——解码流程

Android





## **ijkplayer源码分析(3)——解码流程** 

### **1. 回顾上文** 

在上一篇文章中,我们分析了ijkplayer的read_thread线程中的流程。该线程主要负责打开文件、检测Stream信息、循环等待start接口调用、进入播放流程等步骤。

### **2. read_thread线程中的流程** 

#### **2.1 打开文件** 

read_thread线程首先会打开文件。打开文件时,它会根据文件的格式选择不同的打开方式。例如,如果是MP4文件,它会使用MP4解析器打开文件;如果是FLV文件,它会使用FLV解析器打开文件。

#### **2.2 检测Stream信息** 

打开文件后,read_thread线程会检测Stream信息。Stream信息包括视频流信息、音频流信息和字幕流信息。检测Stream信息时,它会根据文件的格式使用不同的检测方式。例如,如果是MP4文件,它会使用MP4解析器检测Stream信息;如果是FLV文件,它会使用FLV解析器检测Stream信息。

#### **2.3 循环等待start接口调用** 

检测到Stream信息后,read_thread线程会进入循环等待start接口调用的状态。start接口是用于启动播放的接口。当start接口被调用时,read_thread线程会进入播放流程。

#### **2.4 进入播放流程** 

进入播放流程后,read_thread线程会首先打开音频播放器。音频播放器负责播放音频流。打开音频播放器后,read_thread线程会创建音频解码线程。音频解码线程负责解码音频流。

#### **2.5 创建视频解码器** 

read_thread线程还会创建视频解码器。视频解码器负责解码视频流。创建视频解码器时,它会根据文件的格式选择不同的视频解码器。例如,如果是MP4文件,它会使用H264解码器;如果是FLV文件,它会使用VP8解码器。

#### **2.6 创建音频解码线程** 

read_thread线程还会创建音频解码线程。音频解码线程负责解码音频流。创建音频解码线程时,它会根据文件的格式选择不同的音频解码器。例如,如果是MP4文件,它会使用AAC解码器;如果是FLV文件,它会使用MP3解码器。

### **3. ijkplayer的播放流程** 

ijkplayer的播放流程如下:

1. 打开文件
2. 检测Stream信息
3. 循环等待start接口调用
4. 进入播放流程
5. 打开音频播放器
6. 创建音频解码线程
7. 创建视频解码器
8. 创建音频解码线程
9. 开始播放

### **4. 解码线程的创建** 

ijkplayer的解码线程是在read_thread线程中创建的。解码线程负责解码视频流和音频流。解码线程的创建过程如下:

1. 创建视频解码器
2. 创建音频解码器
3. 创建视频解码线程
4. 创建音频解码线程

视频解码线程和音频解码线程都是独立的线程。它们会同时运行,相互协作,以完成视频流和音频流的解码工作。