基本概况

利用Android的SurfaceView + JNI + OpenGL + OpenSL +ffmpeg所做的一个本地视频播放器;

其实去年底在学习音视频知识的时候就做完了这个Demo,但一直想找时间改进并且拖着没有记录成博客,最近在复习音视频知识,希望能够把这个项目重新熟悉一下,顺便记录下来

Android 写一个属于自己的音视频播放器Android 写一个属于自己的音视频播放器
完成功能:
  1. 解析本地视频音频和视频
  2. 音视频同步
  3. 暂停恢复播放
  4. 支持拖动播放
基本结构:

Android 写一个属于自己的音视频播放器

  1. MediaPlayerController 负责对外jni接口
  2. MediaSynchronizer 同步模块
  3. TextureQueue 内部有队列缓存视频帧,负责存入VideoFrame、转换为TextureFrame和对外提供TextureFrame
  4. AudioQueue 内部有队列缓存音频帧
  5. MediaDecoder 音视频解码器
  6. VideoOutput 视频输出
  7. AudioQueue 音频输出
前期知识点:
大致流程:
遇到的难点:
  1. 音视频同步问题
  2. 音频解码速度和视频解码速度差距很大
  3. 播放的速度远远小于解码的解码速度
  4. OpenSL音频播放线程、OpenGL视频渲染线程、ffmpeg解码线程怎么协调,还有先后顺序
  5. 不同格式视频解码对齐问题,会造成花屏错位问题
源码:

https://github.com/ChyengJason/SPlayer

相关文章: