久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于webrtc的android和windows音視頻通訊

 檸檬冰啡咖 2018-04-18

經(jīng)過了數(shù)月的努力,浪費(fèi)了一大把時(shí)間去搞這東西,,總算有個(gè)樣子了,。話說經(jīng)歷了曲折過程真是讓人覺得倍感心酸啊。

  • 前三個(gè)月百度了很多教程下載不到webrtc的代碼只有用熱心網(wǎng)友們提供的webrtc代碼,;vs的工程慢慢的編譯通過了,,簡(jiǎn)單的修改跑通了windows對(duì)windows的音視頻功能,;如果想在一臺(tái)機(jī)器上做測(cè)試需要改下代碼:
void Conductor::AddStreams() {
    if (active_streams_.find(kStreamLabel) != active_streams_.end())
        return;  // Already added.

    rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
        peer_connection_factory_->CreateAudioTrack(
        kAudioLabel, peer_connection_factory_->CreateAudioSource(NULL)));

    rtc::scoped_refptr<webrtc::MediaStreamInterface> stream =
        peer_connection_factory_->CreateLocalMediaStream(kStreamLabel);

    cricket::VideoCapturer *video = OpenVideoCaptureDevice();
    if (video)
    {
        rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track(
            peer_connection_factory_->CreateVideoTrack(
            kVideoLabel,
            peer_connection_factory_->CreateVideoSource(video,
            NULL)));
        main_wnd_->StartLocalRenderer(video_track);

        stream->AddTrack(video_track);
    }

    stream->AddTrack(audio_track);

    if (!peer_connection_->AddStream(stream)) {
        LOG(LS_ERROR) << "Adding stream to PeerConnection failed";
    }
    typedef std::pair < std::string,
        rtc::scoped_refptr<webrtc::MediaStreamInterface> >
        MediaStreamPair;
    active_streams_.insert(MediaStreamPair(stream->label(), stream));
    main_wnd_->SwitchToStreamingUI();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

注意:這里主要是因?yàn)閿z像頭是程序獨(dú)占的,打開一個(gè)peerconnect_client.exe以后不能在本機(jī)再次開一個(gè),,否則視頻時(shí)候找不到攝像頭就崩潰了,。當(dāng)然你機(jī)器多的話可忽視上面代碼,!

  • 由于覺得webrtc的peer_connetc工程寫的很清晰明了,,覺得android也應(yīng)該是很簡(jiǎn)單的,后來才發(fā)現(xiàn)并非如此,。由于鄙人學(xué)個(gè)java,,soandroid學(xué)起來并不難,對(duì)我理解android對(duì)于java就行Qt對(duì)于c++一樣,,都是對(duì)語(yǔ)言的一種封裝(當(dāng)然我只是打個(gè)比方,,不恰當(dāng)?shù)脑捳?qǐng)見諒)。同樣經(jīng)過了許多努力才搞到了android版本的webrtc代碼,,(感謝@Antonius http://blog.csdn.net/chenyafei617/article/details/38085409),仔細(xì)研究了andoroid對(duì)webrtc的封裝,,感慨為何c++為何沒有java那么簡(jiǎn)潔優(yōu)雅的語(yǔ)法呢?
  • 很快就是著手做android的開發(fā),,由于網(wǎng)絡(luò)通訊用了rsa+aes加密,,服務(wù)器用的c++,所以服務(wù)器要處理c++客戶端和android不同平臺(tái)發(fā)過來的數(shù)據(jù)包(加密,、解密,、轉(zhuǎn)發(fā)等等),在處理跨平臺(tái)加密上面浪費(fèi)了兩三周的時(shí)間,,經(jīng)過不屑的努力,,嘿嘿終于能相互通訊了。下面就是痛苦的開始?。,。?/li>
  • 首先像peerconnect_client.exe一樣,,android先給windows客戶端發(fā)送sdp數(shù)據(jù)(包含了 ip,、端口、音視頻編解碼等信息),,當(dāng)windows客戶端收到第一個(gè)sdp數(shù)據(jù)時(shí)(一共需要發(fā)送5個(gè),,后面4個(gè)主要是用于傳輸、打動(dòng),、轉(zhuǎn)發(fā)等等)崩潰了?。?!我開始懷疑是java和c++不同編碼的問題嗎,,可我用的都是utf-8的編碼而且都是英文和數(shù)字,,無語(yǔ)的很;于是我打印了android對(duì)windows的sdp日志A,,有打印了windows對(duì)windows的sdp日志B,,經(jīng)過比較發(fā)現(xiàn):兩個(gè)sdp數(shù)據(jù)結(jié)果完全一樣,包含的數(shù)據(jù)乃至屬性信息都完全一樣??!后來多次調(diào)試,又浪費(fèi)了大約一個(gè)月的時(shí)間,,我放棄了,。。,。,。。,。
  • 我開始不再想這個(gè)問題,,老婆問我為啥看不到你研究東西了,我說:沒思路,,做不下去了,。
  • 無意間我想起我以前的同事有個(gè)日本的vps,而且送給我一個(gè)vpn賬號(hào),;我僥幸試了一下(大約半夜了)下載速度非??捎^,有400k/s,,我開始嘗試下載webrtc的最新代碼,,sync、 runhook了不知道多少次都失敗了,,幾乎又浪費(fèi)了一個(gè)月,。后來在github認(rèn)識(shí)了一個(gè)老外@vsimon,用我不咋滴的英語(yǔ)溝通了下,,它提供了一個(gè)下載代碼的shell腳本,,我萬(wàn)分感謝。他的主頁(yè)https://github.com/vsimon,,在這里你可以找到很多你想要的關(guān)于webrtc的東西,。老外真的很夠意思,很耐心的解答,,而且很愿意開源,,我真的很佩服!!,!當(dāng)天晚上我又試驗(yàn)了一下,,成功下載了所有的代碼已經(jīng)runhook 但是編譯遇到了點(diǎn)小問題,由于webrtc編譯屬性中有一項(xiàng)是:將警告視為錯(cuò)誤?。ㄎ掖闻短珖?yán)謹(jǐn)了吧,,不得不佩服人家做事的耐心和細(xì)心,我們不該有浮躁之心):這里寫圖片描述
    解決這個(gè)問題很簡(jiǎn)單,,需要改一下系統(tǒng)的區(qū)域設(shè)置為美國(guó),,如下:
    這里寫圖片描述
    第二天晚上我又悄悄地下載了代碼,第二天早上一看,,哇塞全部編譯通過,,當(dāng)時(shí)喜出望外,哪知道后面還會(huì)有諸多問題,。
  • 接著又找到了一個(gè)shell腳本,可以編譯ubuntu和ios的庫(kù)文件,,地址公布一下:https://github.com/pristineio/webrtc-build-scripts 不過也經(jīng)過了好久才搞到了android的代碼并且編譯出jar和so文件,,感覺有了希望。
  • 有了這些東西,,我又開始搞android和windows的音視頻通訊,。結(jié)果不在崩潰了,但是windows客戶端無法獲取攝像頭,,搞了好幾次都是醉了,。(由于windows使用ninja編譯的,沒有vs工程文件,,不方便修改和調(diào)試,,不過調(diào)試的話是有pdb文件的)。過了數(shù)日,,我索性
set GYP_GENERATORS=ninja,ninja-msvs
#改成了 
set GYP_GENERATORS=ninja,msvs
  • 1
  • 2
  • 3

然后執(zhí)行runhook 居然生成了vs2013的工程文件all.sln ,原來官方網(wǎng)上介紹的可能會(huì)失敗,,真的是可能會(huì)失敗呀,意思就是可能會(huì)成功?。,。?
由此小小的修改后成功編譯出了所有的文件包含lib和exe,,也能正確捕捉到攝像頭了,。

  • 再次跑了android和windows的通訊,發(fā)現(xiàn)windows傻傻的沒反應(yīng),,這次又把我嚇壞了,,我又擔(dān)心除了上面類似的問題。經(jīng)過了仔細(xì)的排查,發(fā)現(xiàn)是我自己的失誤,,上個(gè)代碼吧,呵呵:
    rtc::EnsureWinsockInit();
    rtc::Win32Thread w32_thread;
    rtc::ThreadManager::Instance()->SetCurrentThread(&w32_thread);
  • 1
  • 2
  • 3

不管你是WinMain還mian 這段代碼一定要放在webrtc的功能調(diào)用之前,,索性直接放在WinMain函數(shù)第一行,。這個(gè)東西是webrtc消息循環(huán)和內(nèi)部發(fā)送消息的驅(qū)動(dòng),。
有了這個(gè)東西再次跑了一下。哇,,出現(xiàn)了兩張臉(當(dāng)然都是我自己的臉了):
 
 
本人顏值不高,,so打了碼,怕嚇到大家,,呵呵,。
windows端使用duilib做的界面庫(kù),感謝開源的力量,。

總結(jié)吧

  • 所有的平臺(tái)都是用webrtc的PeerConnectionFactory以及PeerConnection等等,,這一次小小的實(shí)驗(yàn)讓我了解到谷歌的強(qiáng)大,開源的強(qiáng)大,,自己內(nèi)心的強(qiáng)大才是真正的強(qiáng)大,。
  • 如今實(shí)現(xiàn)了android和windows的音視頻通訊,我揣測(cè)linux,、mac和ios,,瀏覽器的javascript等亦應(yīng)該是如此的流程,殊途同歸(所以不要跟我要代碼,,自己好好研究peerconnection_client,,谷歌不是亂寫一個(gè)demo),事實(shí)上就是如此,,我也已經(jīng)驗(yàn)證過了?。?!
  • 好幾年了沒有如此的成就感了,,一直在擼代碼。鄙人一機(jī)械生出道,,由于興趣開始學(xué)習(xí)編程,,當(dāng)時(shí)沒人指導(dǎo),學(xué)了java,,半年后發(fā)現(xiàn)其不適合做桌面應(yīng)用,,遂放棄了。導(dǎo)師要我做項(xiàng)目,,然學(xué)習(xí)了c++,,走上了一條不歸路,呵呵。大學(xué)時(shí)做了個(gè)開源項(xiàng)目:“quickwifi”,,目的是方便大家使用電腦搭建wifi網(wǎng)絡(luò)供手機(jī)使用,,后來出現(xiàn)了360一鍵wifi等等好多諸如此類的軟件,真的悔恨自己當(dāng)初沒有堅(jiān)持,,或者說沒有人家那份眼光,。只能怪自己愚昧嘍。webrtc我很看好他,,不僅僅是他集成了業(yè)界最先進(jìn)的技術(shù),,更看好的是音視頻在未來的應(yīng)用場(chǎng)景:智能家居,視頻會(huì)議等等,,試想一下,,你走到哪一個(gè)角落任何一臺(tái)電子設(shè)備都可以跟外界通訊那是何等有意思的事情。

另外本人還喜歡php,,html,,javascript等等,也寫過自己的blog,,當(dāng)時(shí)出于資金問題放棄了,。
有興趣的話可以跟我溝通 emailto: [email protected] ,我很喜歡交朋友,,也很喜歡幫助別人,大家一同進(jìn)步,。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多