组件功能定义
1.支持普通视频文件播放、快进(16x)放慢(1/8x),速率可调
2.支持单帧向前向后、支持帧号、百分比定位;
3.支持大华录像下载文件以及丢失时间戳视频文件;
4.自适应视频图像格式、图像大小,支持Direct硬件显示加速;
组件接口
/*------------------------------------------------*/ // 名称:本地视频播放器接口库 /*------------------------------------------------*/ // 版本:VER 1.0.0.0 // 日期:2013年4月18日 14时54分 // 作者:钱廷柱 // 说明: // 功能: // 1.支持普通视频文件播放、快进(16x)放慢(1/8x),速率可调 // 2.支持单帧向前,向后(不完整)、支持帧号、百分比定位; // 3.支持大华录像下载文件以及丢失时间戳视频文件; // 4.自适应视频图像格式、图像大小,支持Direct硬件显示加速; // // 遗留问题: // 1.接口功能未进行完整测试,对主接口函数也是简单测试; /*------------------------------------------------*/ /*------------------------------------------------*/ // 修订:VER 1.0.0.2 // 日期:2013年4月19日 2时1分 // 作者:钱廷柱 // 说明: // 1.调整优化后定位逻辑,修正定位帧不准问题 // 2.定帧定位可能不准的问题 // 3.修改SDK头文件部分接口函数返回参数定义,使用int数据类型代替unsigned int类型 // 4.实现对象部分逻辑优化 /*------------------------------------------------*/ /*------------------------------------------------*/ // 修订:VER 1.0.0.2 // 日期:2013年4月22日 15时13分 // 作者:钱廷柱 // 说明: // 1.BUG 打开文件后,立即播放,播放失败。 // 2.调整定位帧策略,若当前帧与定位目标帧号相同时返回成功(旧版本返回失败) // 3.BUG 无法恢复正常播放速率 /*----------------------------------------------*/ /*------------------------------------------------*/ // 修订:VER 1.0.0.2 // 日期:2013年4月23日 9时56分 // 作者:钱廷柱 // 说明: // 1.BUG 设置播放范围返回失败问题。 /*----------------------------------------------*/ /*------------------------------------------------*/ // 修订:VER 1.0.0.3 // 日期:2013年4月27日 17时23分 // 作者:钱廷柱 // 说明: // 1.自适应窗口大小,即在窗口缩放时自动调整视频渲染大小(窗口重绘时调用Player_Refresh()) // 2.打开视频文件时添加播放结束事件回调,让组件在播放结束后向调用者报告结束事件 // 3.BUG 重复调用SDK_Init和重复调用SDK_UnInit内存泄漏问题 /*----------------------------------------------*/ #ifndef _VVPLAY_HEAD_INCLUDE_ #define _VVPLAY_HEAD_INCLUDE_ #ifndef VVPLAY_SDK_API #define VVPLAY_SDK_API __declspec(dllimport) #endif //播放状态 enum Playing_Status { STATUS_EXIT, //线程退出 STATUS_START, //播放正在进行 STATUS_PAUSE, //播放暂停 STATUS_STEP_FORWARD, //播放下一帧 STATUS_STEP_BACKWARD, //播放前一帧 STATUS_STOP, //播放停止,但线程未终止,只是定位到首帧 STATUS_FAST, //加速播放 STATUS_SLOW //慢速播放 }; enum DRAW_ENGINE { ENGINE_DEFAULT=-1, ENGINE_DIRECT3D, ENGINE_SOFTWARE }; /*----------------------------------------------*/ // 接收参数: Playing_Status status //当前播放状态 // 接收参数: unsigned int frame_pos //当前帧 // 接收参数: unsigned int frame_total //总帧 // 接收参数: void * context //回调上下文句柄 // 功能描述: 播放回调函数原形 /*----------------------------------------------*/ typedef void (__stdcall *PLAY_CALLBACK)(Playing_Status status, unsigned int frame_pos, unsigned int frame_total, void* context); /*----------------------------------------------*/ // 接收参数: const char* filename //播放结果文件名 // 功能描述: 播放回调函数原形 /*----------------------------------------------*/ typedef void (__stdcall *PLAY_EndFileCALLBACK)(const char* filename); #ifdef __cplusplus extern "C" { #endif //播放器句柄 #define INVALID_PLAYER_HANDLE (0) //无效句柄 typedef void* HPLAYER; /*----------------------------------------------*/ // 初始化函数 /*----------------------------------------------*/ /*----------------------------------------------*/ // 函数名称: SDK_Init // 函数参数: void // 返 回 值: int // -1:失败 0:成功 // 功能描述: 初始化环境(必须在应用程序使用SDK函数前调用) /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall SDK_Init(void); /*----------------------------------------------*/ // 函数名称: SDK_UnInit // 函数参数: void // 返 回 值: void // 功能描述: 清理初始化环境,释放所有资源(应用程序退出时必须调用,否则会有内存泄漏) /*----------------------------------------------*/ VVPLAY_SDK_API void __stdcall SDK_UnInit(void); /*----------------------------------------------*/ // 播放器管理函数 /*----------------------------------------------*/ /*----------------------------------------------*/ // 函数名称: Player_Create // 函数参数: HWND hwnd //绑定的窗体句柄 // 函数参数: DRAW_ENGINE drawengine //绘制引擎类型 支持DIRECT加速和软件加速两种模式 // 返 回 值: HPLAYER //返回创建成功后的播放器句柄,如果失败则返回0 // 功能描述: 创建播放器 并绑定窗体 /*----------------------------------------------*/ VVPLAY_SDK_API HPLAYER __stdcall Player_Create(HWND hwnd, DRAW_ENGINE drawengine); /*----------------------------------------------*/ // 函数名称: Player_Refresh // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: void // 功能描述: 刷新视频显示窗口 在WINDOWS PAIN事件中调用该函数重绘 /*----------------------------------------------*/ VVPLAY_SDK_API void __stdcall Player_Refresh(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_Destroy // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: void // 功能描述: 销毁播放器 在程序退出时使用销毁对象 /*----------------------------------------------*/ VVPLAY_SDK_API void __stdcall Player_Destroy(HPLAYER hplayer); /*----------------------------------------------*/ // 播放器控制函数 /*----------------------------------------------*/ /*----------------------------------------------*/ // 函数名称: Player_OpenVideo // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: const char * lpfilename //打开文件名(完整路径) // 函数参数: PLAY_CALLBACK cb //回调函数 // 函数参数: void * context //回调上下文 // 函数参数: unsigned int * total_num //打开成功后 返回视频总帧数 // 函数参数: double * framerate //视频帧率 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 打开视频 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_OpenVideo(HPLAYER hplayer, const char* lpfilename, PLAY_CALLBACK cb, void* context, PLAY_EndFileCALLBACK cb_endplay, unsigned int* total_num, double* framerate); /*----------------------------------------------*/ // 函数名称: Player_OpenFile // 函数参数: HPLAYER hplayer //播放器句柄 // 功能描述: 关闭视频 /*----------------------------------------------*/ VVPLAY_SDK_API void __stdcall Player_CloseVideo(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_SetScope // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: unsigned int begin_pos //播放起始帧号 // 函数参数: unsigned int end_pos //播放结束帧号 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 设置播放帧范围 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_SetScope(HPLAYER hplayer, int begin_pos, int end_pos); /*----------------------------------------------*/ // 函数名称: Player_GetScope // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: unsigned int* begin_pos //返回当前播放起始帧号 // 函数参数: unsigned int* end_pos //返回当前播放结束帧号 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 获取当前播放器播放帧范围,如果没有设置播放帧范围,那么将返回1-总帧数 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_GetScope(HPLAYER hplayer, int* begin_pos, int* end_pos); /*----------------------------------------------*/ // 函数名称: Player_Start // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: PLAY_CALLBACK cb //播放进度回调函数,如果设置为0,则不回调 // 函数参数: void* context //回调上下文 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 开始播放,从当前播放帧范围内重新开始播放 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_Start(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_Stop // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 停止播放,并当前帧设置为播放帧范围的起始帧号 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_Stop(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_Pause // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: unsigned int // -1:失败 >=0表示成功,返回值为当前帧号 // 功能描述: 暂停播放 返回当前帧号 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_Pause(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_SeekPos // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: unsigned int // 跳转目标帧号 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 跳转至指定帧号位置(当前播放帧范围) /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_SeekPos(HPLAYER hplayer,unsigned int seek_pos); /*----------------------------------------------*/ // 函数名称: Player_SeekPer // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: double seek_per //跳转目标百分比,值范围为[0.0, 1.0] // 返 回 值: int // -1:失败 0:成功 // 功能描述: 跳转至百分比位置(当前播放帧范围) /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_SeekPer(HPLAYER hplayer,double seek_per); /*----------------------------------------------*/ // 函数名称: Player_SetSpeed // 函数参数: HPLAYER hplayer //播放器句柄 // 函数参数: double speed //播放速率百分比,值范围为[0.125, 16.0] // 返 回 值: int // -1:失败 0:成功 // 功能描述: 设置播放速率 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_SetSpeed(HPLAYER hplayer,double speed); /*----------------------------------------------*/ // 函数名称: Player_ResetSpeed // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: int // -1:失败 0:成功 // 功能描述: 复位播放速率,即以正常的速率播放 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_ResetSpeed(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_Step_Forward // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: unsigned int //跳转成功后的当前帧号,如果为-1则表示跳转失败 // 功能描述: 逐帧播放下一帧 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_Step_Forward(HPLAYER hplayer); /*----------------------------------------------*/ // 函数名称: Player_Step_Backward // 函数参数: HPLAYER hplayer //播放器句柄 // 返 回 值: unsigned int //跳转成功后的当前帧号,如果为-1则表示跳转失败 // 功能描述: 逐帧播放前一帧 由于仅跳转至前一帧时,原始参考帧信息会丢失,所以不能单帧跳,当前设置为向前跳到GOP+1位置 /*----------------------------------------------*/ VVPLAY_SDK_API int __stdcall Player_Step_Backward(HPLAYER hplayer); #ifdef __cplusplus } #endif #endif
第三方组件
1.ffmpeg;
2.SDL渲染引擎;
演示Demo