多功能视频播放组件演示Demo

组件功能定义 

  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
View Code

 第三方组件

  1.ffmpeg;

  2.SDL渲染引擎;

演示Demo

VVPlayer Demo下载

原文地址:https://www.cnblogs.com/qiantz/p/3066573.html