int main (int argc, char **argv)
{
int ret = 0;
version_info ();
if (argc < 2)
{
dt_info ("", "
no enough args\n");
show_usage ();
return 0;
}
void *player_priv;
dtplayer_para_t *para = dtplayer_alloc_para ();
if (!para)
return -1;
strcpy (para->file_name, argv[1]);
para->update_cb = (void *) update_cb;
para->no_audio=1;
//para->no_video=1;
para->width = 720;
para->height = 480;
ret = dtplayer_init (&player_priv, para);
if (ret < 0)
return -1;
dtplayer_release_para (para);
dtplayer_start (player_priv);
//here enter cmd loop
event_loop (player_priv);
dt_info ("", "QUIT
DTPLAYER-TEST\n");
return 0;
}
启动dtplayer播放,只需要构造一个结构体即可,即dtplayer_para_t,其定义在dtplayer/dtplayer_api.h中
typedef struct dtplayer_para
{
char file_name[FILE_NAME_MAX_LENGTH];
int video_index;
int audio_index;
int sub_index;
int loop_mode;
int no_audio;
int no_video;
int no_sub;
int sync_enable;
int width;
int height;
int (*update_cb) (player_state_t * sta);
} dtplayer_para_t;
最少的参数只需要设置下文件名。然后调用dtplayer_init dtplayer_start就可以启动播放了,非常简单,控制的话此处由于获取了player_priv也就是dtplayer的句柄
后面pause、resume、seek等都直接使用此句柄就可以了
这里还要说明的是,虽然可以直接在dtplayer_para_t中设置noaudio novideo等参数,但dtplayer给大家提供了更好的方法,即配置文件的方法,具体是sys_set.ini
通过设置此配置文件,便可以方便的实现 屏蔽audio video 开关同步,设置输出宽高等,而且不需要重新编译,这个后面会单独写文介绍。
3.2 dtplayer内部播放流程
这里简单介绍下dtplayer的内部播放流程,通过跟踪数据流来介绍
首先回顾下开篇的dtplayer框图,图中不但阐明了dtplayer的基本所有模块,最主要的是介绍了其工作原理,
当文件名传输给dtplayer时,dtplayer会构造dtdemuxer模块,来读取并分析数据,demuxer的作用是解封装,也就是说从demuxer读取过来的数据就是完整的视频帧或者音频es包了。
dtplayer通过dthost模块将数据缓存在dtport中,dthost启动后会启动两个模块,分别是audio模块和video模块,这两个模块又分别启动两个线程,即解码和输出线程,完成视频音频的播放。
这里只是简单介绍下,细节部分后面会陆续有新的文章出来详细介绍,这里只是让大家有个概括的印象。
4 dtplayer支持的格式
4.1 stream格式
目前暂未添加任何dtplayer独有的stream,依赖ffmpeg的demuxer
4.2 demuxer格式
目前暂未添加任何dtplayer独有的demuxer,依赖ffmpeg的demuxer
4.3 decoder
目前暂未添加任何dtplayer独有的decoder,依赖ffmpeg的decoder
4.4 render
音频支持格式:alsa
视频支持格式:sdl1 sdl2
5 tudo
下一步的计划主要包括如下几个方面
5.1 dtplayer UI
5.2 添加一整套的示例即stream demuxer decoder 等供大家参考
5.3 添加一些工具性应用,如解析参数、分离av数据等
5.4 修改bug,使得整个框架趋于稳定
5.5 release version1.0
最后,希望dtplayer能给大家带来一些有用的帮助。
联系开发者:peter_future@outlook.com
由于后面随着开发的进行文章会进行细节的更新,因此为了保证读者随时读到最新的内容,文章禁止转载,多谢大家支持。