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; | 字幕编解码器</ |