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

📄 channelmgr.h

📁 mysee网络直播源代码Mysee Lite是Mysee独立研发的网络视频流媒体播放系统。在应有了P2P技术和一系列先进流媒体技术之后
💻 H
字号:
/*
 *  Openmysee
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#ifndef __CHANNELMGR_H_
#define __CHANNELMGR_H_

typedef UINT16 CHANNELID;

#include "Layer1Pin.h"
#include "NetWorkStub.h"
#include "MsgMgr.h"
#include "ZZLFileReader.h"

class HttpRequest;
class InfAnime;

class CChannelMgr
{
protected:
	CChannelMgr(CHANNELID ChannelID);
	virtual ~CChannelMgr();

public:
	static	CChannelMgr*	Allocator(CHANNELID ChannelID);
	static  void	Dellocator(CChannelMgr* pdel, BOOL block = FALSE);

private:
	static unsigned int CALLBACK _DellocatorProc(void* lpParameter);
	static unsigned int CALLBACK _RequestFunc(void* lpParameter);
	HANDLE	h_RequestThread;

	enum REQUEST_STATUS{
    REQUEST_DEAD = -2,
	REQUEST_FAIL = -1,
	REQUEST_NOPP = 0,
	REQUEST_INIT,
    REQUEST_BUFFER,
    REQUEST_TESTSTATE,
	REQUEST_OK
	};

    // 处理状态切换时的初始化,包括ZZL文件的初始化和气球消息
    void    TestSwitchStatus(void);
	volatile	LONG	m_bRequesting;
    volatile    LONG    m_PrevRequest;
    volatile    LONG    m_CoutPinInit;

	P2P_RETURN_TYPE		m_errorcode;
	HttpRequest*	pHttpSession;
	CString		m_RequestURL;
	CString		m_ChannelNameBuf;

public:
	BOOL Init(
		SOCKET SockFromProxy	// in, 来自NetworkProxy的连接
		);

	// 开始下载这个频道
	BOOL Request(
		LPCTSTR url	// in, 要播放的文件
		);

	// 停止下载当前频道
	void Stop();
	BOOL DeadforFatalError(){return m_bRequesting == REQUEST_FAIL;}
	P2P_RETURN_TYPE GetErrorCode(){return m_errorcode;}

	void SendMsgToShow(LPCTSTR msg, UINT len) { return; }

	// 获取数据,可能得到普通Sample或者MediaType(参考struct SampleHeader的注释)
	// 返回值:>=1 表示成功;0表示暂时没有数据;<=-1 表示错误
    // *这个函数有递归调用的可能
	int GetData(
		SampleHeader& header,	// out, 数据头
		PBYTE& pData,			// out, 存储数据的缓冲区
		const UINT maxSize,		// in, 缓冲区的长度
		const bool bAudio,		// in, 获取音频还是视频
		const bool bKeySample	// in, 是否寻找关键帧
		);

	static	int		HandleLayerErrCode(P2P_RETURN_TYPE RetType, CString& strRetErr);	//将字符串strRetErr变成错误的消息(支持多语言),并根据消息返回一个iRet
	void  GetChannelName(CString& strRet);		//将字符串strRet变成格式化的频道名
	CMsgMgr*	GetMsgMgr();

private:
	CMsgMgr m_MsgMgr;

private:
    Layer1Pin   m_videopin;
    Layer1Pin   m_audiopin;
	NPLayer1::Layer1 m_Layer1;
	NetworkStub m_NetworkStub;
	SOCKET m_SockFromProxy;
	CCritSec m_MapCritSec;
	CHANNELID m_ChannelID;

	MSGID m_NameMsgID;

    InfAnime*   pInfAnime;
};

#endif

⌨️ 快捷键说明

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