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