• 多功能视频播放组件演示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下载

  • 相关阅读:
    读书是最划算的自我投资,免费送几本最好的Python学习电子书
    一个出身寒门的状元之编程
    幼儿园小朋友都在学人工智能了,已经从小学毕业的我们该如何学?
    python语音识别终极指南
    Python可视化神器——pyecharts的超详细使用指南!
    用 Python 分析过往 36 年春晚节目数据,发现一些趣事
    拉勾网数据分析职位分析
    按时分秒对数据进行分箱
    numpy
    基于协同过滤的推荐系统案列
  • 原文地址:https://www.cnblogs.com/qiantz/p/3066573.html
Copyright © 2020-2023  润新知