-
Notifications
You must be signed in to change notification settings - Fork 163
接口设计
chenk edited this page Jun 7, 2018
·
2 revisions
fanplayer 的接口采用了标准 C 的函数接口,这样可以保证更好的兼容性和可移植性。
ffplayer.h 中定义了全部的接口:
// 函数声明
void* player_open (char *file, void *win);
void player_close (void *hplayer);
void player_play (void *hplayer);
void player_pause (void *hplayer);
void player_seek (void *hplayer, int64_t ms);
void player_setrect (void *hplayer, int type, int x, int y, int w, int h);
int player_snapshot(void *hplayer, char *file, int w, int h, int waitt);
void player_setparam(void *hplayer, int id, void *param);
void player_getparam(void *hplayer, int id, void *param);
player_open 函数,传入一个需要播放的 url 地址,可以是本地文件,也可以是网络流媒体 url,第二个参数 win 需要传入用于视频渲染的窗口。在 windows 平台上传入窗口句柄即可。函数调用成功后会返回一个 void* 类型的 hplayer,你也可以理解为播放器的句柄。在内部实现中,其实就是一个指向 player context 结构体的指针。采用 void* 类型,就是为了隐藏了内部 context 的细节。其余的接口函数都需要传入 player_open 所获得的 hplayer。
针对播放、暂停、定位、设置显示区域、截屏,这些功能,提供对应的接口函数,方便用户调用。对于扩展的功能,定义了 player_setparam 和 player_getparam 两个接口来实现。
播放进度和播放时间,定义了两种通知方式,一种是 callback 回调函数:
// player event callback
typedef void (*PFN_PLAYER_CALLBACK)(void *vdev, int32_t msg, int64_t param);
回调参数说明:
vdev 是视频渲染设备的句柄,普通用户可以不用关心这个参数
msg 是消息类型,目前有以下三种:
PLAY_PROGRESS 播放进度消息
PLAY_COMPLETED 播放完成消息
PLAY_SNAPSHOT 截屏完成消息
param 为附加参数
当 msg 类型为 PLAY_PROGRESS 时,表示当前播放进度,ms 为单位
我们可以通过
player_setparam(g_hplayer, PARAM_PLAYER_CALLBACK, callback_func);
来注册和取消注册回调(要取消注册将 callback 置为 NULL 即可)
另外一种是默认的消息通知机制(不注册 callback 的只是默认为此机制)
windows 平台上为标准的窗口消息:
#define MSG_FANPLAYER (WM_APP + 1)
windows 程序只需要处理这个消息即可
另外播放器还可以通过定时查询的方法,来获取播放进度:
// 获取多媒体文件的总长度和当前播放位置(毫秒为单位)
LONGLONG total = 1, pos = 0;
player_getparam(g_hplayer, PARAM_MEDIA_DURATION, &total);
player_getparam(g_hplayer, PARAM_MEDIA_POSITION, &pos );
更多更详细的接口说明,请大家参考 ffplayer.h 中的注释。
fanplayer wiki