返回
ijkplayer源码分析(3)——解码流程
Android
2023-11-08 08:21:00
## **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. 创建音频解码线程
视频解码线程和音频解码线程都是独立的线程。它们会同时运行,相互协作,以完成视频流和音频流的解码工作。