iOS直播推流丟包處理方案

iOS推流一般是用aac+h264封裝成flv后,推流rtmp協(xié)議
大致的流程圖我簡單畫了下

iOS推流.png

在使用過程中發(fā)現(xiàn)雨涛,如果主播推流網(wǎng)絡(luò)卡了M分鐘(很常見)枢舶,這時候編碼后的數(shù)據(jù)如果不丟的話懦胞,還會把老的(編碼后的)數(shù)據(jù)陸陸續(xù)續(xù)推上去(可能要N分鐘才能推完),這時候播放器有丟包處理祟辟,X分鐘后恢復(fù)正常医瘫,但是體驗其實不算太好侣肄,因為推流端沒丟包旧困,本來不該推上去的老數(shù)據(jù),還是推上去了稼锅,這樣播放器即使丟包了吼具,還是會看到老數(shù)據(jù),會造成幾個不好的結(jié)果:

  1. 播放器過了很久才恢復(fù)到實時矩距。
  2. 無謂的帶寬浪費了拗盒。
  3. 在那段恢復(fù)的時間內(nèi),延遲大锥债。

所以陡蝇,要丟包,編碼出來的包哮肚,如果隊列很大登夫,說明推不上去,那這時候允趟,應(yīng)該丟掉一部分恼策。


我的思路是: 根據(jù)包的隊列或者buffer, 換算成時間單位s潮剪, 如果>3s, 就丟掉一半涣楷,或者丟的只剩3s。
根據(jù)pts為閥值來判斷抗碰,丟掉某個pts之前的數(shù)據(jù)狮斗。
丟包的時候,視頻包要注意一下弧蝇,很老的I幀包可以丟情龄,但是臨近閥值的時候,就不能丟捍壤,丟到I幀前一幀骤视。
如果不能按照pts丟,那就只能用size大小來丟幀鹃觉。
這個策略和播放的丟包其實是一樣的专酗。

Size大小丟幀:

           //當前幀的size追加到m_bufferSize
            increaseBuffer(size);
           //如果超過了最大緩沖buf,且又是視頻I幀盗扇,置一下標志位
           if(m_bufferSize > kMaxSendbufferSize && isKeyframe) {
                m_clearing = true;
                //Todo 記錄丟幀次數(shù)祷肯,滿足條件就重連
            }
            m_networkQueue.enqueue([=]() {
                size_t tosend = size;
                uint8_t* p ;
                buf->read(&p, size);
                //如果沒到max_buf沉填,則視頻I/P幀,音頻I幀都輸出佑笋,如果超過max_buf翼闹,只寫視頻I幀
                while(tosend > 0 && !this->m_ending && (!this->m_clearing || this->m_sentKeyframe == packetTime)) {
                    this->m_clearing = false;
                    size_t sent = m_streamSession->write(p, tosend);
                    p += sent;
                    tosend -= sent;
                    this->m_throughputSession.addSentBytesSample(sent);
                    if( sent == 0 ) {
                        dispatch_semaphore_wait(m_networkWaitSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)));
                    }
                }

              this->increaseBuffer(-int64_t(size)); //m_bufferSize -= size

消息回調(diào)的函數(shù)中,把重連的消息拋上去

      setClientState(kClientStateBlock);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒋纬,一起剝皮案震驚了整個濱河市猎荠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜀备,老刑警劉巖关摇,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碾阁,居然都是意外死亡输虱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門脂凶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宪睹,“玉大人,你說我怎么就攤上這事蚕钦⊥げ。” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵冠桃,是天一觀的道長命贴。 經(jīng)常有香客問我,道長食听,這世上最難降的妖魔是什么胸蛛? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮樱报,結(jié)果婚禮上葬项,老公的妹妹穿的比我還像新娘。我一直安慰自己迹蛤,他們只是感情好民珍,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盗飒,像睡著了一般嚷量。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逆趣,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天蝶溶,我揣著相機與錄音,去河邊找鬼。 笑死抖所,一個胖子當著我的面吹牛梨州,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播田轧,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼暴匠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傻粘?” 一聲冷哼從身側(cè)響起每窖,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抹腿,沒想到半個月后岛请,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旭寿,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡警绩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盅称。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肩祥。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缩膝,靈堂內(nèi)的尸體忽然破棺而出混狠,到底是詐尸還是另有隱情,我是刑警寧澤疾层,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布将饺,位于F島的核電站,受9級特大地震影響痛黎,放射性物質(zhì)發(fā)生泄漏予弧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一湖饱、第九天 我趴在偏房一處隱蔽的房頂上張望掖蛤。 院中可真熱鬧,春花似錦井厌、人聲如沸蚓庭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽器赞。三九已至,卻和暖如春墓拜,著一層夾襖步出監(jiān)牢的瞬間港柜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工撮弧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潘懊,地道東北人姚糊。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像授舟,于是被迫代替她去往敵國和親救恨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,654評論 0 3
  • 現(xiàn)今移動直播技術(shù)上的挑戰(zhàn)要遠遠難于傳統(tǒng)設(shè)備或電腦直播释树,其完整的處理環(huán)節(jié)包括但不限于:音視頻采集肠槽、美顏/濾鏡/特效處...
    大榮紙閱讀 8,081評論 5 22
  • 360頁秸仙,51個故事。都是短篇桩盲。作家的體裁寂纪,有寫情感,工作赌结,成長捞蛋,雞湯類的文章。而本書柬姚,卻是寫精神病患者的世界和思...
    走在雨的縫中閱讀 572評論 1 1
  • 李笑來把人分為表現(xiàn)型和進取型量承,表現(xiàn)型的人更在意的是別人對自己的評價搬设,害怕自己表現(xiàn)不夠好,所以感覺不行的話撕捍,就干脆放...
    問天eric閱讀 328評論 0 0
  • 錯的人相遇之后總會離開 而對的人會一直在那里 在最好的年紀遇到你 算我倒霉 但我肯定會遇到更好的人 以及那個更好的...
    葉力力閱讀 863評論 3 2