Ijkplauyer的一些结构体的解释

本文深入解析IjkMediaPlayer的核心结构体,包括IjkMediaPlayer的状态管理、FFplayer、AVClass、AVOption及衍生类型。Ijkmp_change_state_l用于状态变更,weak_thiz作为上下文对象,restart在不同消息处理中扮演关键角色。同时,介绍了FFmpeg的AVOption和相关范围概念。
摘要由CSDN通过智能技术生成

IjkMediaPlayer

    struct IjkMediaPlayer {
	    volatile int ref_count;   //计数有几个实例化
	    pthread_mutex_t mutex; //保护接口调用的锁
	    FFPlayer *ffplayer;  // FFPlayer是原ffplayer里面的结构体,有被ijk作者扩展
	    int (*msg_loop)(void*); //
	    SDL_Thread *msg_thread;
	    SDL_Thread _msg_thread;
	    int mp_state;
	    char *data_source;  //存储应用层传入的播放url
	    void *weak_thiz;
	    int restart;
	    int restart_from_beginning;
	    int seek_req;  //记录是否调用了ijkplayer.c里的ijkmp_seek_to
	    long seek_msec;   //记录ijkmp_seek_to 要拖动到第几毫秒值
};

nt (msg_loop)(void); 指针函数,调用消息循环函数msg_loop

SDL_Thread 详细见 SDL_Thread

int mp_state;
ijkplayer.h里面定义了很多种播放状态,比如,MP_STATE_IDLE ,MP_STATE_INITIALIZED,MP_STATE_ASYNC_PREPARING。ijkmp_change_state_l 函数专门用来改变mp_state 状态值 -

名称 意义
MP_STATE_IDLE 0 空闲
MP_STATE_INITIALIZED 1 初始化完成
MP_STATE_ASYNC_PREPARING 2 异步准备
MP_STATE_PREPARED 3 准备完毕
MP_STATE_STARTED 4 启动
MP_STATE_PAUSED 5 暂停
MP_STATE_COMPLETED 6 播放完毕
MP_STATE_STOPPED 7 停止
MP_STATE_ERROR 8 错误
MP_STATE_END 9 结束关闭

void* weak_thiz;
ijkmp_set_weak_thiz 函数用于设置weak_thiz,其实就是缓存IJKFFMoviePlayerController 对象。说到底就是上下文对象.方便之后各种数据状态认祖归中。

int restart;
ff_play.c在read_thread 函数里发出FFP_MSG_COMPLETED消息,ijkmp_get_msg收到并处理这个消息时把restart,restart_from_beginning重置为1.ijkmp_get_msg函数收到FFP_REQ_START消息后,某些条件下又把他们重生设为0.这些变化原因还需探明。

FFplayer

成员函数 意义
AVClass *av_class 具体见AVClass
VideoState *is 具体见VideoState
AVDictionary *format_opts 具体见AVDictionary
AVDictionary *codec_opts 具体见AVDictionary
AVDictionary *sws_dict 具体见AVDictionary
AVDictionary *player_opts 具体见AVDictionary
AVDictionary *swr_opts 具体见AVDictionary
AVDictionary *swr_preset_opts 具体见AVDictionary
char *input_filename url或者文件路径
int audio_disable,video_disable,subtitle_disable 音频,视频,字幕的开关
const char* wanted_stream_spec[AVMEDIA_TYPE_NB]; 数据类型,参数为enum AVMediaType
int seek_by_bytes 字节查找,待补充
int display_disable 显示禁用标志,哪些禁用,待补充
int show_status 显示的状态,不知道使用的state是哪些,待补充
int av_sync_type; 同步主轴,3种 AV_SYNC_AUDIO_MASTER,AV_SYNC_VIDEO_MASTER, AV_SYNC_EXTERNAL_CLOCK
int64_t start_time; 开始时间,只知道和AV_NOPTS_VALUE,AV_TIME_BASE,AV_TIME_BASE_Q有关
int64_t duration; 持续时间,同start_time
int fast; 待补充 初始化为1
int genpts; 待补充 初始化为0
int lowres; 待补充 初始化为0
int decoder_reorder_pts; 解码出来的pts
int autoexit; 是否自动退出
int loop; 循环数
int framedrop; 丢帧数,setoption可设置,默认为1
int64_t seek_at_start; 跳转的时候开始的地方
int subtitle; 字幕,好像没赋值,待补充
int infinite_buffer; 无限缓冲,和realtime有关,待补充
enum ShowMode show_mode; 待补充,ShowMode 没找到
char *audio_codec_name; 音频编解码器的名字,用来返回
char *subtitle_codec_name; 字幕编解码器</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值