likewind123 / ffplaysdl2

该项目用于修改ffpaly使其支持sdl2 并且能够多窗口播放视频
4 stars 3 forks source link

用不了啊 #1

Open sunflover opened 8 years ago

sunflover commented 8 years ago

想法很不错,把ffplay封装成类,把SDL换成最新版的 但是,请带一个Demo呀,我这样写 void CffplayTestDlg::OnBnClickedBtnOpen() { // TODO: 在此添加控件通知处理程序代码 CMedia video; video.SetHWND(GetDlgItem(IDC_STATIC)->m_hWnd); video.OpenFile("D:\CloudSync\PlayerProject\Wildlife.mkv"); } 跑到这一行,奔溃了 Media.cpp int read_thread(void *arg) is->last_video_stream = is->video_stream = -1;

再次希望能带一个能直接执行的Demo项目。

likewind123 commented 8 years ago

demo 已经上传

sunflover commented 8 years ago

编译通过了,跑起来,既没有视频也没有音频。

CMedia m_media;//类成员 m_media.SetHWND(GetDlgItem(IDC_STATIC)->m_hWnd);//Picture Control On Dialog m_media.OpenFile("D:\CloudSync\PlayerProject\Wildlife.mkv");

sunflover commented 8 years ago

void CffplaySDL2Dlg::OnBnClickedOk() { m_media.SetHWND(GetDlgItem(IDC_STATIC)->m_hWnd); m_media.OpenFile("D:\CloudSync\PlayerProject\Wildlife.mkv"); //m_media.OpenFile("D:\CloudSync\PlayerProject\Wildlife.mkv"); //m_media.OpenFile("D:/CloudSync/PlayerProject/Wildlife.mkv"); }

这几种写法都不行,换其他视频文件也都不行哦! 你确定你那儿是正常的吗?

likewind123 commented 8 years ago

我这里是正常的,能正常跑才发上来

注意:openfile 之后是跑的线程,如果你的程序创建的播放类不是指针的话,请创建全局变量,而不是局部变量 你直接跑我的项目,把里面的 void CffplaySDL2Dlg::OnBnClickedOk() { //其它代码不动 //这里改成你的路径 pChild1->media->OpenFile("D:/CloudSync/PlayerProject/Wildlife.mkv"); }

这样也跑不起来?

likewind123 commented 8 years ago

按照你的方法,我把代码改成如下,也没问题 注意,资源ID是 IDC_STATIC1 和 IDC_STATIC2,而不是IDC_STATIC void CffplaySDL2Dlg::OnBnClickedOk() { media.SetHWND(GetDlgItem(IDC_STATIC1)->GetSafeHwnd()); media.OpenFile("D:/CloudSync/PlayerProject/Wildlife.mkv"); }

sunflover commented 8 years ago

代码如下: // ffplaySDL2Dlg.h : 头文件 //

pragma once

include "Media.h"

// CffplaySDL2Dlg 对话框 class CffplaySDL2Dlg : public CDialogEx { // 构造 public: CffplaySDL2Dlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据 enum { IDD = IDD_FFPLAYSDL2_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现 protected: HICON m_hIcon;

// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()

public: CMedia m_media; afx_msg void OnBnClickedOk(); };

// ffplaySDL2Dlg.cpp : 实现文件 void CffplaySDL2Dlg::OnBnClickedOk() { m_media.SetHWND(GetDlgItem(IDC_STATIC_PIC)->GetSafeHwnd());//IDC_STATIC_PIC是一个Picture Control,在主对话框上; m_media.OpenFile("D:\CloudSync\PlayerProject\Wildlife.wmv"); //m_media.OpenFile("D:/CloudSync/PlayerProject/Wildlife.mkv"); }

结果要么崩溃,要么就是Picture Control是黑的,可以的话留个邮箱,方便交流。

likewind123 commented 8 years ago

你用我的demo代码成功了吗