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);
    }
}