• webRTC windows demo1(转)


        // setup video engine
        char cCameraName[MAX_CAMERA_NAME_LENGTH];
        memset(cCameraName, 0 , MAX_CAMERA_NAME_LENGTH);
        int iRet = RET_SUCCESS;
        CaptureCapability stCurSelectCapbility;
    
        char cCameraID[MAX_CAMERA_ID_LENGTH];
        memset(cCameraID, 0 , MAX_CAMERA_ID_LENGTH);
        int iCapdeviceCount = 0;
        
        iCapdeviceCount = m_VieCapture->NumberOfCaptureDevices();
        ASSERT(iCapdeviceCount > 0);
    
        for(int i = 0; i < iCapdeviceCount; i++)
        {
            iRet = m_VieCapture->GetCaptureDevice(i, cCameraName, MAX_CAMERA_NAME_LENGTH, cCameraID, MAX_CAMERA_ID_LENGTH);
            ASSERT(iRet == RET_SUCCESS);
            int iCapbilityCount = 0;
            iCapbilityCount = m_VieCapture->NumberOfCapabilities(cCameraID, MAX_CAMERA_ID_LENGTH);
            ASSERT(iCapbilityCount > 0);
            iRet = m_VieCapture->GetCaptureCapability(cCameraID, MAX_CAMERA_ID_LENGTH, iCapbilityCount - 1, stCurSelectCapbility);
            ASSERT(iRet == RET_SUCCESS);
        }
        int iCaptureId;
        iRet = m_VieCapture->AllocateCaptureDevice(cCameraID, MAX_CAMERA_ID_LENGTH, iCaptureId);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = ViECreateWindow(m_CapRenderHwnd, 500,200, 500, 500,_T("Local Render"));
        ASSERT(iRet == RET_SUCCESS);
        
        iRet = ViECreateWindow(m_DecRenderHwnd, 500, 700, 500,500, _T("Remote Render"));
        ASSERT(iRet == RET_SUCCESS);
     
        iRet = m_VieRender->AddRenderer(iCaptureId,(void*)m_CapRenderHwnd, 0, 0.0,0.0,1.0,1.0);
        ASSERT(iRet == RET_SUCCESS);
        
        iRet = m_VieCapture->StartCapture(iCaptureId, stCurSelectCapbility);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieRender->StartRender(iCaptureId);
    
        VideoCodec videoCodec;
          
        int numOfVieCodecs = m_VieCodec->NumberOfCodecs();  
        bool bFindVideoCode = false;
    
        ASSERT(numOfVieCodecs > 0);
        for(int i=0; i<numOfVieCodecs;++i)  
        {  
            if(m_VieCodec->GetCodec(i,videoCodec)!=-1)  
            {  
                if(videoCodec.codecType == kVideoCodecVP8)  
                {
                    bFindVideoCode = true;
                    break;
                }
            }  
        } 
        ASSERT(bFindVideoCode);
    
        iRet = m_VieBase->CreateChannel(m_ChannelId);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieRender->AddRenderer(m_ChannelId,(void*)m_DecRenderHwnd, 0, 0.0,0.0,1.0,1.0);
        ASSERT(iRet == RET_SUCCESS);
        iRet = m_VieRender->StartRender(m_ChannelId);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieCodec->SetSendCodec(m_ChannelId, videoCodec);
        ASSERT(iRet == RET_SUCCESS);
        iRet = m_VieCodec->SetReceiveCodec(m_ChannelId, videoCodec);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieCapture->ConnectCaptureDevice(iCaptureId, m_ChannelId);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieRTP_RTCP->SetRTCPStatus(m_ChannelId, webrtc::kRtcpCompound_RFC4585);
        ASSERT(iRet == RET_SUCCESS);
    
    
        iRet = m_VieRTP_RTCP->SetKeyFrameRequestMethod(m_ChannelId, webrtc::kViEKeyFrameRequestPliRtcp);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieRTP_RTCP->SetTMMBRStatus(m_ChannelId, true);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieNetwork->SetSendDestination(m_ChannelId, "127.0.0.1", 11111, 11112);
        ASSERT(iRet == RET_SUCCESS);
        iRet = m_VieNetwork->SetLocalReceiver(m_ChannelId, 11111, 11112, "127.0.0.1");
    
        iRet = m_VieBase->StartSend(m_ChannelId);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VieBase->StartReceive(m_ChannelId);
        ASSERT(iRet == RET_SUCCESS);
    
    
        //setup voice engine
        CodecInst voiceCodec;  
    
        int numOfVoeCodecs = m_VoeCodec->NumOfCodecs();  
        bool bFindAudioCode = false;
        for(int i=0; i<numOfVoeCodecs;++i)  
        {  
            if(m_VoeCodec->GetCodec(i,voiceCodec)!=-1)  
            {  
                if(strncmp(voiceCodec.plname,"ISAC",4)==0)  
                {
                    bFindAudioCode = true;
                    break;  
                }
            }  
        }  
        ASSERT(bFindAudioCode);
        // define iSAC codec parameters  
        strcpy(voiceCodec.plname, "ISAC");  
        voiceCodec.plfreq   = 16000;    // iSAC宽带模式  
        voiceCodec.pltype   = 103;      // 默认动态负载类型  
        voiceCodec.pacsize  = 480;      // 480kbps,即使用30ms的packet size  
        voiceCodec.channels     = 1;        // 单声道  
        voiceCodec.rate     = -1;       // 信道自适应模式,单位bps 
    
        int iMaxAEChannelNum = m_VoeBase->MaxNumOfChannels();
        m_AudioChannel = m_VoeBase->CreateChannel();
        ASSERT((m_AudioChannel < iMaxAEChannelNum) && (m_AudioChannel >= 0));
        
        iRet = m_VoeCodec->SetSendCodec(m_AudioChannel, voiceCodec);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VoeRTCP->SetRTCPStatus(m_AudioChannel, true);
        ASSERT(iRet == RET_SUCCESS);
        
        iRet = m_VoeNetwork->SetSourceFilter(m_AudioChannel, 11113, 11114, "127.0.0.1");
        ASSERT(iRet == RET_SUCCESS);
        
        iRet = m_VoeBase->SetSendDestination(m_AudioChannel, 11113, "127.0.0.1", -1, 11114);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VoeBase->SetLocalReceiver(m_AudioChannel, 11113, 11114, "127.0.0.1");
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VoeBase->StartPlayout(m_AudioChannel);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VoeBase->StartReceive(m_AudioChannel);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VoeBase->StartSend(m_AudioChannel);
        ASSERT(iRet == RET_SUCCESS);
    
        NsModes mode(kNsDefault);//
        iRet = m_VoeApmPtr->SetRxNsStatus(m_AudioChannel, true, mode);
        ASSERT(iRet == RET_SUCCESS);
    
        AgcModes agcmode(kAgcDefault);
        iRet = m_VoeApmPtr->SetRxAgcStatus(m_AudioChannel, true, agcmode);
        ASSERT(iRet == RET_SUCCESS);
    
        iRet = m_VoeApmPtr->SetEcStatus(true, kEcAec);
        ASSERT(iRet == RET_SUCCESS);


    原文转自 http://www.xuebuyuan.com/1719933.html

  • 相关阅读:
    用C++读写EXCEL文件的几种方式比较
    20个值得收藏的网页设计开放课件
    char* 应用, 去除字符串内多余空格, 用算法而非库函数
    东拉西扯:王建硕主义
    Lisp 的本质(The Nature of Lisp)
    web前端:html
    [原译]理解并实现原型模式实现ICloneable接口.理解深浅拷贝
    [原译]理解并实现装饰器模式
    3分钟理解Lambda表达式
    [原译]实现IEnumerable接口&理解yield关键字
  • 原文地址:https://www.cnblogs.com/happykoukou/p/5736071.html
Copyright © 2020-2023  润新知