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

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日