📄 aviomgr.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 + -