对于播放库的选择,有SDL,Directx,DirectShow,OpenGL,GDI等,区别可以百度搜搜;
SDL意味着可以跨平台,这点很重要,因为我所在的环境,更多的可以考虑夸平台,所以选择SDL,SDL简介具体可以看下面的链接http://blog.csdn.net/nightmare/article/details/7457;
一:下载SDL相关文件
http://www.libsdl.org/download-1.2.php
注意:SDL 1.2和 SDL 2.0是有区别的,具体请查看
http://blog.csdn.net/lanxiaziyi/article/details/24938981
二:VS2010添加相关文件,具体根据编译环境来操作;
三:我使用的是MFC进行显示,代码如下:
#include "stdafx.h"
#include "SDL_264Show.h"
#include "SDL_264ShowDlg.h"
#include "afxdialogex.h"
extern "C" {
#include "SDL.h"
#include "SDL_thread.h"
#include "SDL_Video.h"
}
extern "C"{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/mem.h>
};
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height, int biBitCount, RGBQUAD *pColorTable);
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CSDL_264ShowDlg 对话框
CSDL_264ShowDlg::CSDL_264ShowDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CSDL_264ShowDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSDL_264ShowDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CSDL_264ShowDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CSDL_264ShowDlg::OnBnPlay)
END_MESSAGE_MAP()
// CSDL_264ShowDlg 消息处理程序
BOOL CSDL_264ShowDlg::OnInitDialog()