ijk概述
mediacodec相关
OpenGL相关
filter相关
setOption配置相关
metadata相关
h264编码器特有的设置域
线程相关
消息机制
音频输出
声道切换
SDL_CreateCond 与 SDL_CreateThreadEx
如何暂停
笔记可能微乱,但大致清晰,可能会对他人有所帮助,故分享出来。
ijk概述
《零基础读懂视频播放器控制原理: ffplay 播放器源代码分析》: 零基础读懂视频播放器控制原理: ffplay 播放器源代码分析 - 云+社区 - 腾讯云
《基于 ffmpeg 的跨平台播放器实现》: 基于 ffmpeg 的跨平台播放器实现 - 云+社区 - 腾讯云
《ijkplayer框架深入剖析》: 文章正在审核中... - 简书
三种播放器实现: 均继承自 AbstractMediaPlayer 继承自 IMediaPlayer
1.AndroidMediaPlayer:基于安卓自带播放器(位于ijkplayer-java)
2.IjkExoMediaPlayer:基于ExoPlayer(位于ijkplayer-exo)
介绍:ExoPlayer开发指南(官方文档翻译)_super_wk的博客-CSDN博客_exoplayer 低版本
3.IjkMediaPlayer:基于ffplay(位于ijkplayer-java,底层实现在ijkmedia目录)
输出:
video-output: NativeWindow, OpenGL ES 2.0
audio-output: AudioTrack, OpenSL ES
jni底层接口:
IjkMediaPlayer : ijkmedia/ijkplayer/android/ijkplayer_jni.c
播放器结构体:VideoState(ff_ffplay_def.c )
播放入口:
ffplay.c : ffp_prepare_async_l
stream_open :创建音视频解码前后队列, 创建数据读取(read_thread)和视频显示线程(video_refresh_thread)
1.read_thread:读取packet
stream_component_open: 打开视频、音频解码器。在此会打开相应解码器,并创建相应的解码线程
av_read_frame:读取媒体数据,得到的是音视频分离的解码前数据
packet_queue_put:往缓冲队列中放入解码前的音、视、字幕 packet
打开视频解码器:
ffplay.c : stream_component_open
ffpipeline_open_video_decoder
ff_ffpipeline.c : ffpipeline_open_video_decoder 调用 IJKFF_Pipeline->func_open_video_decoder
IJKFF_Pipeline->func_open_video_decoder 函数指针指向 and

本文详细探讨了ijkplayer的内部结构,包括Mediacodec在Android解码中的应用、OpenGL支持的优化、H264编码器设置、线程管理和音频输出切换。重点介绍了如何配置setOption、处理特殊帧格式和音频输出,以及线程协调与暂停机制。

1511

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



