void CMPlayerUtility::OpenUrl(CMString sUrl, const UINT32 nMode/* = EMode_3mv*/, const char* coursewareID )
{
    
    string path = CMCourseDownload::GetInstance()->GetLocalFilePath(coursewareID);
    
    //先检查本地文件在不在
    if(path.size() !=0 && CMFile::FileExist(CMString(path.c_str())))
    {
    	OpenFile(CMString(path.c_str()), nMode);
    	return;
    }
    
	CMPath tmpPath(CMPath::DOWNLOAD_PATH);
    CMString sOrgUrl;

    INT32 pos = sUrl.ReverseFind(L"?sid=");
    if(pos < 0)
    	pos = sUrl.ReverseFind(L"&sid=");
    if(pos > 0)
    	sOrgUrl = sUrl.Left(pos);
    else
    	sOrgUrl = sUrl;
    
    
    CMString filename = tmpPath.String()+CMFile::GetTempFileName(sOrgUrl, "");
	if(CMFile::FileExist(filename))
    {
    	OpenFile(filename, nMode);
    	return;
    }
    //本地无此文件,去数据库读取
    if(m_nState == EReady)
    {
        m_bDataCompleted = FALSE;
        SAFEDELETE(m_pMediaData);
        m_bOnlyAudio = nMode != EMode_3mv;
        if(nMode == EMode_3mv || nMode == EMode_3ma)
            m_pMediaData = new CMNetDataSource;
		else if(nMode == EMode_aac)
			 m_pMediaData = new CMAACDataSource;
		else
			return;
        BOOL ret = FALSE;
        
//        sUrl = CMString("http://42.96.138.63/Upload/Files/root/CourseWareFile/201401/201401101233202695248e5b93f75f4685af/201401161429192546803cd48b08aa3daf7f_(960x640).3mv");
        printf("surl:%s \n",(const CHAR*)sUrl);
        
        if(m_pMediaData && m_pMediaData->Init(this, m_pStreamBuffer))
            ret = m_pMediaData->Open(sUrl, NET_VOD);
        if(ret)
        {
            m_pMediaData->Start();
            m_PlayerObserver.StateChange(m_UserData, EOpening, m_nState);
            m_nState = EOpening;
        }
        else
            SAFEDELETE(m_pMediaData);
    }
}
void CMWebImage::FormatFilePath(const char* sUrl)
{
	m_sFilePath.Empty();
	CMString url = sUrl;
    INT32 pos = url.ReverseFind(L"/");
    if(pos < 0)
        return;
	m_sFilePath = CMPath(CMPath::TEMP_PATH).String() + CMFile::GetTempFileName(url, L"") + "@2x." + CMFile::GetFileExt(url.Mid(pos+1));
}
BOOL CMWebImage::GetFromUrl(int nID, const char* sUrl)
{
	CMString url = sUrl;
	INT32 pos = 0;
	PicUrl * pPicUrl = NULL;

	if(!sUrl || strlen(sUrl) <= 0)
		goto ret;

    pos = url.ReverseFind(L"/");
    if(pos < 0)
        goto ret;

    if(GetFilePath(sUrl))
		return TRUE;//CMFile::DeleteFile(sFilePath);

	if(m_lstPicUrl)
	{
		for(int i=0; i<m_lstPicUrl->size();i++)
		{
			pPicUrl = (PicUrl *)m_lstPicUrl->at(i);
			if(strcmp(pPicUrl->url, sUrl) == 0)
				goto ret;
		}
	}
	//加入下载列表
	pPicUrl = new PicUrl;
	pPicUrl->id = nID;
    
    utf8ncpy(pPicUrl->url, sUrl, 299);

	if(!m_lstPicUrl)
		m_lstPicUrl = new CMList<PicUrl*>;
	m_lstPicUrl->push_back(pPicUrl);
	
	DownloadNext();

	return FALSE;
ret:
	if(m_pListener)
		m_pListener->OnFinish(m_UserData,TResult::EUnknownError,nID);
	return FALSE;	
}
void CMWebImage::DownloadNext()
{
    if (CMGlobal::TheOne().IsOffline())
	{
		if(m_pListener)
			m_pListener->OnFinish(m_UserData, MERN_OFFLINE, 0);
        return;
	}
    
	if(!m_pDownloader)
	{
		m_pDownloader = new CMDownloader(this);
#if defined(PLAT_IOS) || defined(PLAT_AND)
		m_pDownloader->SetMaxFileSize(1024*1024);
#else
		m_pDownloader->SetMaxFileSize(512*1024);
#endif
	}

	if(m_pDownloader->GetStatus() == CMDownloader::RUNNING)
		return;

	if(m_lstPicUrl->size() > 0)
	{
		PicUrl* pPicUrl = (PicUrl*)m_lstPicUrl->at(0);
		if(pPicUrl)
		{
			FormatFilePath(pPicUrl->url);
			CMString sID;
			CMGlobal::TheOne().GetSessionID(sID);
			CMString url = pPicUrl->url;		
			INT32 pos = url.ReverseFind(L"?");
			if(pos < 0)
				url += L"?sid=";
			else
				url += L"&sid=";
			url += sID;
		
			m_pDownloader->Download(url, m_sFilePath);
		}
	}
}