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

📄 tvmeetingdlg.h

📁 用c++做的视频会议源代码
💻 H
字号:
// TVMeetingDlg.h : header file
//

#if !defined(AFX_TVMEETINGDLG_H__FD158E84_EE68_49E6_85F4_FA291A9BBA4B__INCLUDED_)
#define AFX_TVMEETINGDLG_H__FD158E84_EE68_49E6_85F4_FA291A9BBA4B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "resource.h"
#include "clientinfo.h"
#include "CmdQueue.h"
#include "AudioPlay.h"
#include "CodecMgr.h"
#include "AudioRec.h"
#include "AudioData.h"
#include "mixerbase.h"
#include "mixerfader.h"
#include "TWScriptEdit.h"
/////////////////////////////////////////////////////////////////////////////
// CTVMeetingDlg dialog
#define IOM_NOTIFY		WM_USER+50
#define IOMN_ERR        5

//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

#define FLAG_AUDIO			0x3131
#define FLAG_VIDEO			0x3132
#define FLAG_CMD			0x3133
#define FLAG_TEXT			0x3134
#define FLAG_PORT			0x3135

#define VER_TVMEETING		100
#define SIZE_AUDIO_FRAME	3840 // wzz 4-16
#define SIZE_AUDIO_PACKED	240
#define CMD_JOIN			1
#define CMD_JOINOK			2
#define CMD_ACTIVE      	3
#define CMD_ACTIVEOK      	4
#define CMD_EXIT			5
#define CMD_REQUEST_MAIN    6
#define CMD_QUIT_MAIN       7
#define CMD_SENDTEXT		8
#define CMD_SENDTEXTOK		9
#define CMD_DISPORT			10
#define CMD_DISPORTOK		11
#define CMD_DISPORTCOMFRIM	12

#define SOCK_CMD			1
#define SOCK_AUDIO_REC1		2
#define SOCK_AUDIO_REC2		3
#define SOCK_AUDIO_REC3		4
#define SOCK_AV				5

#define IOM_AUDIO			WM_USER+51
#define IOM_AUDIO2			WM_USER+52
#define IOM_AUDIO3			WM_USER+53

#define IOM_VIDEO			WM_USER+54
#define IOM_PLAY_AUDIO		WM_USER+55
#define IOM_PLAY_AUDIO_EXT	WM_USER+56

#define MAX_CONNECT_USER	3
#define MAX_AUDIO_FRAME		3 //wzz 2003-4-4
#define PORT				6667
#define MAX_TEXT_BUFFER     1024
#define MAX_AUDIO_BUFFER	6

typedef struct
{
	short flag;
	BYTE id;
	BYTE cmd;
	BYTE type;//0:始发 1:反馈
	BYTE ext;
	BYTE m_ChatNo;
	unsigned short data_size_extra;
}PACK_CMD;
typedef struct
{
	short flag;
	BYTE id;
	BYTE cmd;
	BYTE type;//0:始发 1:反馈
	BYTE busy; //0:空闲,1:占用
	short m_Port;
}PACK_PORT;

typedef struct
{
	short flag;
	BYTE  id;
	BYTE  cmd;
	BYTE  type;
	char data[MAX_TEXT_BUFFER];
}PACK_TEXT;


typedef struct
{
	short flag;
	BYTE  id;
	BYTE  type;
	BYTE data[SIZE_AUDIO_PACKED];
}PACK_AUDIO;

//视频数据包(不包含视频数据)
typedef struct
{
	short flag;
	BYTE id;
	BYTE subid;
	BOOL key; //whether key frame
	unsigned int data_size_total;
	unsigned short data_size;
	
}PACK_VIDEO;

typedef struct
{
	bool bVideoIn;
	bool bVideoOut;
	bool bAudioIn;
	bool bAudioOut;
	bool bVideoCodec;
	bool bAudioCodec;
}DEVICE_SUPPORT;
typedef struct
{
	sockaddr_in sc;
	int len;
}THREAD_TRANSMIT;

// added by rc 04031611
struct UIITEM
{
	BOOL bUsed;
	short id;
};


#include "UDPSocket.h"
#include "VideoCapture.h"	
#include "inifile.h"	// Added by ClassView
const CString szWindowProp = "TVMeeting";
class CClientInfo;
class CTVMeetingDlg : public CDialog
{
// Construction
public:
	virtual BOOL PreTranslateMessage(MSG* pMsg);


	CString m_szLocalIP;
	CString	m_sIPAddress;
	CString	m_sHostName;
	
	CUDPSocket m_CMDSocket;
	CUDPSocket m_AVSocket;
	CUDPSocket m_ARecSocket1;
	CUDPSocket m_ARecSocket2;
	CUDPSocket m_ARecSocket3;

	HANDLE m_hCmdSockThread;
	DWORD m_dwCmdSockThreadId;

	HANDLE m_hAVSockThread;
	DWORD m_dwAVSockThreadId;
	HANDLE m_hARecSockThread1;
	DWORD m_dwARecSockThreadId1;
	HANDLE m_hARecSockThread2;
	DWORD m_dwARecSockThreadId2;
	HANDLE m_hARecSockThread3;
	DWORD m_dwARecSockThreadId3;

	DWORD m_dwAudioDecodeId;
	HANDLE m_hAudioDecode;
	DWORD m_dwAudioDecodeId2;
	HANDLE m_hAudioDecode2;
	DWORD m_dwAudioDecodeId3;
	HANDLE m_hAudioDecode3;

	sockaddr_in m_sockaddr;
	sockaddr_in m_Cmddst;
	sockaddr_in m_AVdst;
	sockaddr_in m_ARec1dst;
	sockaddr_in m_ARec2dst;
	sockaddr_in m_ARec3dst;
	
	CTVMeetingDlg(CWnd* pParent = NULL);	// standard constructor
	CString sIP[MAX_CONNECT_USER];
	BYTE m_idCmd;
	BYTE m_idVideo;
	BYTE m_nCurVid;

	CCmdQueue m_CmdQueue;
	DEVICE_SUPPORT m_ds;
	CClientInfoList m_ClientInfoList;
	CClientInfoList m_TmpList;
	CClientInfo* MainExist;

	BOOL bMainExist;
	CStatic* SLocal;
	short uiCount;
	// to handle Audio and vidio
	CAudioPlay m_AudioPlay;
	CAudioRec m_AudioRec;
	CCodecMgr m_CodecMgr;
	CCodecMgr m_CodecMgr1;
	CCodecMgr m_CodecMgr2;
	CVideoCapture m_ViCap;

	PACK_AUDIO m_AudioPack;
	DWORD m_dwAudioOutId;
	DWORD m_dwAudioInId;
	DWORD m_dwPlayAudioId;
	DWORD m_dwPlayAudioExtId;

	HANDLE m_hAudioOut;
	HANDLE m_hAudioIn;
	HANDLE m_hPlayAudio;
	HANDLE m_hPlayAudioExt;

	char m_AudioLocal[SIZE_AUDIO_FRAME];
	char m_AudioRemote[SIZE_AUDIO_FRAME];
	char m_AudioRemote2[SIZE_AUDIO_FRAME];
	char m_AudioRemote3[SIZE_AUDIO_FRAME];
	char m_AudioPlayFrame[SIZE_AUDIO_FRAME];

	int m_iAudioBuf;
	int m_ChatNo[MAX_CONNECT_USER];
	int m_uDataSend;
	int m_nLogInfoLines;
	int m_nDistributePort1;
	int m_nDistributePort2;
	int m_nDistributePort3;
	int m_Count[3];
	bool bIsPortChecking;
	char m_VideoRemote[76032];
	char m_VideoPack[MAX_UDP_SIZE];
	char* m_VideoLocal;
	CMixerFader	m_mainVolume;
	CMixerFader	m_mikeVolume;
	int PortBusy[3];
	CString DistributeIP[3];
	int PlayFlag[3];
	int StartUp();
	int CleanUp();
	int GetLocalHostName(CString& sHostName);
	int GetIPAddress(const CString& sHostName, CString& sIPAddress);
	bool GetMSPeerName(CSocket *pSocket,CString& sIPAddress,UINT& Port);
	void WriteLogInfoToCtrl(CString Info);
	void UpdateStatusBarInfo(CString Info); 
	void DeleteUserFromLst(CString strIP);

	BOOL InitSocket(int m_nSockFlag);
	void InitAV();
	BOOL InitCap();
	BOOL DestroySocket(int m_SockFlag);
	BOOL DestroyAudioPlay();
	BOOL DestroyAudioRec();

	sockaddr_in& GetCurrentAddr();
	sockaddr_in GetRemoteAddr();
	BOOL Call(char *ip, unsigned short port,int flag);
	void SetCmdDst(char *ip, unsigned short port);
	void SetAVDst(char *ip, unsigned short port);
	BOOL SendCmd(PACK_CMD *pCmd, UINT nLen,sockaddr_in &addr, BOOL bFlag);
	void SetVideoWnd(short id);
	void OnCommand(PACK_CMD* ppc,int len,sockaddr_in m_scIn);
	void OnDistributePort1(PACK_PORT *pp, int len,sockaddr_in m_scIn);
	void OnDistributePort2(PACK_PORT *pp, int len,sockaddr_in m_scIn);
	void OnDistributePort3(PACK_PORT *pp, int len,sockaddr_in m_scIn);

	void OnTextInfo(PACK_TEXT *pTxt, int len,sockaddr_in m_scIn);

	static DWORD WINAPI SockCmdThreadProc(LPVOID lpParameter);
	static DWORD WINAPI SockAVThreadProc(LPVOID lpParameter);
	static DWORD WINAPI SockARecThreadProc1(LPVOID lpParameter);
	static DWORD WINAPI SockARecThreadProc2(LPVOID lpParameter);
	static DWORD WINAPI SockARecThreadProc3(LPVOID lpParameter);

	static DWORD WINAPI AudioDecodeThreadProc(LPVOID lpParameter);
	static DWORD WINAPI AudioDecodeThreadProc2(LPVOID lpParameter);
	static DWORD WINAPI AudioDecodeThreadProc3(LPVOID lpParameter);

	static DWORD WINAPI AudioInThreadProc(LPVOID lpParameter);
	static DWORD WINAPI PlayAudioThreadProc(LPVOID lpParameter);
	static DWORD WINAPI PlayAudioExtThreadProc(LPVOID lpParameter);

	static void CALLBACK CmdTimeOutProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
	void OnEncodeAudioData(char *pa, int len);
	BOOL EncodeAudioData(char *pin,int len,char* pout,int* lenr);
	void OnVideoData(CStatic* Rect,char* Video);
	void OnDecodeVideoData(PACK_VIDEO *ppv, int len,short UID,BOOL bMain);
	void OnEncodeVideoData(char *pv, int len,BOOL key);
	static LRESULT CALLBACK VideoStreamCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr);

// Dialog Data
	//{{AFX_DATA(CTVMeetingDlg)
	enum { IDD = IDD_TVMEETING_DIALOG };
	CListBox	m_LstJoin;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CTVMeetingDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	CTWScriptEdit m_EditMain;
	CString path;
	CIniFile IniFile;
	CToolTipCtrl m_tooltip;
	void OnSetUp();
	UIITEM ui[3];
	void SetUi(short id);
	short GetUi();
	CRITICAL_SECTION m_cs;

	HICON m_hIcon;
	// Generated message map functions
	//{{AFX_MSG(CTVMeetingDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	virtual void OnOK();
	virtual void OnCancel();
	afx_msg void OnClose();
	afx_msg void OnJoin();
	afx_msg void OnExit();
	afx_msg void OnDestroy();
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnMainVideo();
	afx_msg void OnSendText();
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
	afx_msg void OnSend1();
	afx_msg void OnSend2();
	afx_msg void OnJoin3();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TVMEETINGDLG_H__FD158E84_EE68_49E6_85F4_FA291A9BBA4B__INCLUDED_)

⌨️ 快捷键说明

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