ilovehellworld 2023-03-13 14:07 采纳率: 50%
浏览 60
已结题

vs+mfc+ffmpeg求一个最简单的视频播放器

大家好!vs+mfc+ffmpeg求一个最简单的视频播放器,只需要播放,暂停,停止,拖动进度条到指定时间播放这几个功能就可,谢谢(播放时间精确到毫秒),谢谢!

  • 写回答

6条回答 默认 最新

  • Leodong. 2023-03-13 14:18
    关注

    以下是一个vs+mfc+ffmpeg简单的视频播放器主界面,具体代码如下:

    // VideoPlayerDlg.h 文件
    
    #pragma once
    
    #include "ffmpeg.h"
    #include "SliderCtrlEx.h" // 自定义滑动条控件
    
    class CVideoPlayerDlg : public CDialogEx
    {
    public:
        CVideoPlayerDlg(CWnd* pParent = nullptr);   // 标准构造函数
        virtual ~CVideoPlayerDlg();
    
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_VIDEOPLAYER_DIALOG };
    #endif
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
        HICON m_hIcon;
        BOOL m_bPlaying;                // 是否正在播放
        BOOL m_bPause;                  // 是否暂停
        BOOL m_bDragSlider;             // 是否正在拖动滑动条
        int64_t m_iDuration;            // 视频总时长
        int64_t m_iCurrentTime;         // 当前播放时间
        AVFormatContext* m_pFormatCtx;  // 视频格式上下文
        AVCodecContext* m_pCodecCtx;    // 视频解码器上下文
        AVCodec* m_pCodec;              // 视频解码器
        AVFrame* m_pFrame;              // 视频帧
        uint8_t* m_pFrameBuffer;        // 视频帧缓存
        int m_iVideoStreamIndex;        // 视频流索引
        CSliderCtrlEx m_slider;         // 自定义滑动条控件
    
        void OpenVideo(const char* szFileName);        // 打开视频文件
        void CloseVideo();                             // 关闭视频文件
        void PlayVideo();                              // 播放视频
        void PauseVideo();                             // 暂停视频
        void StopVideo();                              // 停止视频
        void SeekTo(int64_t iTime);                    // 跳转到指定时间播放
        void DrawFrame(AVFrame* pFrame);               // 绘制视频帧
        static DWORD WINAPI DecodeThread(LPVOID lp);   // 解码线程函数
        void OnTimer(UINT_PTR nIDEvent);               // 定时器回调函数
    
        virtual BOOL OnInitDialog();
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        afx_msg void OnBnClickedButtonPlay();
        afx_msg void OnBnClickedButtonPause();
        afx_msg void OnBnClickedButtonStop();
        afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
        DECLARE_MESSAGE_MAP
    
    
    

    如果以上回答对您有所帮助,望采纳~谢谢

    评论

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 赞助了问题酬金15元 3月13日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大