⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aviomgr.h

📁 一个实时音频或视频通讯程序
💻 H
字号:
//NetTalk
/*------------------------------------------------------------------------------*\
 =============================
   模块名称: AVIOMgr.h
 =============================
 
 [版权]
 
   2000-2001  115软件工厂  版权所有
                                              
\*------------------------------------------------------------------------------*/
//
#ifndef _AVIOMGR_H_
#define _AVIOMGR_H_

#include "AudioRec.h"
#include "CodecMgr.h"
#include "VideoCapture.h"
#include "AudioPlay.h"
#include "UDPSocket.h"


//msg
//the LOWORD wParam specify the notify code
#define IOM_NOTIFY     WM_USER+50

//notify code

#define IOMN_CALL     0
#define IOMN_ACCEPT   1
   
//////////
#define IOMN_END      2//HIWORD of wParam identify the end code
#define E_TIMEOUT   1
#define E_USER      2
////////////////
#define IOMN_REFUSE   3 //HIWORD of wParam identify the refuse code

#define R_TIMEOUT   1
#define R_USER       2
#define R_BUSY       3

//the HIWORD of wParam specify the err code
#define IOMN_ERR     4      

//err code

#define IOME_STOP        0
#define IOME_SOCKET      1
#define IOME_AUDIO_IN    2
#define IOME_AUDIO_OUT   3
#define IOME_VIDEO_IN    4
#define IOME_VIDEO_OUT   5
#define IOME_AUDIO_CODEC 6
#define IOME_VIDEO_CODEC 7
//the HIWORD of wParam contain status,1 on ,0 off
//remote status
#define IOMN_AUDIO     5
#define IOMN_VIDEO     6

//data handle msg
//the lParam point to the AVIO object
//Use
//GetRemoteAudio
//GetRemoteVideo
//GetLocalAudio
//GetLocalVideo
//to Handle the data ,and proccess this as you like(paint or play)
//Warning:you should return these messages quickly,as these msg is sent by SendMessage
////the wParam identify the data type,0 local,or remote
#define IOM_AUDIO       WM_USER+51
#define IOM_VIDEO       WM_USER+52


///status
#define STA_TALK    1
#define STA_FREE    2
#define STA_WAIT    3
#define STA_WAIT_USER 4

//default socket port
#define PORT  1159
//pack flag
#define FLAG_AUDIO 0x3131
#define FLAG_VIDEO 0x3132
#define FLAG_CMD   0x3133
//
#define SIZE_AUDIO_FRAME 960
#define SIZE_AUDIO_PACKED 60
//
//音频数据包(包含音频数据)
typedef struct
{
	short flag;
	BYTE  id;
	BYTE data[SIZE_AUDIO_PACKED];
}PACK_AUDIO;
//视频数据包(不包含视频数据)
typedef struct
{
	short flag;
	BYTE id;
	BYTE subid;
	BYTE key; //whether key frame
	unsigned int data_size_total;
	unsigned short data_size;
	
}PACK_VIDEO;
/////
#define CMD_CALL           1
#define CMD_ACCEPT	       2
//the ex item identify the refuse code
#define CMD_REFUSE    	   3			
#define CMD_END            4
#define CMD_INFO           5
#define CMD_KEEP           6
//the ex item identify the the status,1 on,0 off
#define CMD_VIDEO          7
#define CMD_AUDIO          8
//命令数据包
typedef struct
{
	short flag;
	BYTE id;
	BYTE cmd;
	BYTE ex;
	unsigned short data_size_extra;
}PACK_CMD;

typedef struct
{
	bool bVideoIn;
	bool bVideoOut;
	bool bAudioIn;
	bool bAudioOut;
	bool bVideoCodec;
	bool bAudioCodec;
}DEVICE_SUPPORT;


class CAVIOMgr
{
public:
	CAVIOMgr();
	virtual  ~CAVIOMgr();
	
	BOOL Init();
	void Destroy();

	BOOL Call(char* ip,unsigned short port);
	BOOL Accept();
	void OnAccept();
	BOOL Refuse();
	BOOL EndTalk();

	UINT GetFrameCount();
	UINT GetDataRcv();
	UINT GetDataSend();

	BOOL EnablePreview(BOOL b);
	
	sockaddr_in GetRemoteAddr();
	int GetStatus();
	void GetDeviceSupport(DEVICE_SUPPORT& ds);

	BITMAPINFO* GetBitampInfo();
	char* GetRemoteAudio(UINT& len);
	char* GetRemoteVideo(UINT& len);
	char* GetLocalAudio(UINT&len);
	char* GetLocalVideo(UINT& len);
	
	
	void SetRemoteAudioRcvWnd(HWND hwnd);
	void SetRemoteVideoRcvWnd(HWND hwnd);
	void SetLocalAudioRcvWnd(HWND hwnd);
	void SetLocalVideoRcvWnd(HWND hwnd);
	void SetMainWnd(HWND hwnd);
	
	void VideoSend(BOOL b);
	void SetVideoQuality(UINT q);

	friend class CCodecMgr;

protected:
	BOOL InitCap();
	BOOL DestroyCap();

	void DestroyVideoCodec();
	BOOL InitVideoCodec();

	void DestroyAudioCodec();
	BOOL InitAudioCodec();
	
	BOOL DestroyAudioPlay();
	BOOL InitAudioPlay();

	BOOL DestroyAudioRec();
	BOOL InitAudioRec();
	
	BOOL DestroySocket();
	BOOL InitSocket();

	void OnEncodeVideoData(char* pv,int len);
	void OnEncodeAudioData(char* pa,int len);
	void OnDecodeVideoData(PACK_VIDEO* ppv,int len);
	void OnDecodeAudioData(PACK_AUDIO* ppa,int len);
	void OnCommand(PACK_CMD* ppc,int len);

	void SetDst(char* ip,unsigned short port);
	
	static DWORD WINAPI AudioInThreadProc(LPVOID lpParameter);
	static DWORD WINAPI AudioOutThreadProc(LPVOID lpParameter);
	static DWORD WINAPI SockThreadProc(LPVOID lpParameter);
	static void CALLBACK WaitTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime);
	static LRESULT CALLBACK VideoStreamCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr);
	
protected:

	UINT m_nFrameCount;
	UINT m_uDataRcv;
	UINT m_uDataSend;

	HANDLE m_hAudioOut;
	HANDLE m_hAudioIn;
	DWORD m_dwAudioOutId;
	DWORD m_dwAudioInId;

	BOOL m_bVideoSend;
	
	UINT m_timerWait;
	
	PACK_AUDIO* m_ppaL;
	PACK_VIDEO* m_ppvL;
	char* m_paR;
	char* m_pvR;
	char* m_paL;
	char* m_pvL;

	
	int m_iStatus;	
	DEVICE_SUPPORT m_ds;

	HWND m_hwndMainWnd;
	HWND m_hwndLocalVideoRcv;
	HWND m_hwndLocalAudioRcv;
	HWND m_hwndRemoteVideoRcv;
	HWND m_hwndRemoteAudioRcv;
	
	

	int m_iAudioBuf;
	
	CAudioPlay m_AudioPlay;
	CAudioRec m_AudioRec;
	
	CCodecMgr m_CodecMgr;
	CVideoCapture m_ViCap;
	CUDPSocket m_Socket;


	sockaddr_in m_sockaddr;
	sockaddr_in m_dst;
	
	
	CAPSTATUS m_CapStauts;

	HANDLE m_hSockThread;
	DWORD m_dwSockThreadId;
};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -