BSDSocket接收視頻數(shù)據(jù)總結(jié)

最近項目上使用Socket接收單邊機傳送過來的h264裸流,這個小小的需求結(jié)果得花非常多的時間測試其穩(wěn)定性。以下是在開發(fā)過程中解決的一點心得。

  1. 信號
    使用bsd sockets得需要注意處理SIGPIPE信號,這是一個不可恢復(fù)的系統(tǒng)信號,如果不做處理程序會直接crash。而我們需要給用戶一個友好的提示

  2. 自定義協(xié)議
    h264數(shù)據(jù)是一個連續(xù)的IO流,所以雙方都需定義一個協(xié)議指導(dǎo)客戶端如果接收數(shù)據(jù)。協(xié)議包含frame的大小, i/p 的標記位等等業(yè)務(wù)相關(guān)信息。
    在實際測試途中,協(xié)議頭并沒有如愿接收正確的數(shù)據(jù)。比如期望的結(jié)果是 01 07 09 10, 但是客戶端收到的是 01 00 00 00 ,后面的數(shù)據(jù)都被置0了, 造成接收幀數(shù)據(jù)的時候?qū)R錯誤。
    最后的解決辦法就是盡量精簡協(xié)議頭長度,只保留幀長度等關(guān)鍵信息。另外,在獲取幀數(shù)據(jù)的時候查找 h264 00 00 00 01 的分隔符。盡量保證數(shù)據(jù)的穩(wěn)定性。

  3. 超時
    使用socket一個不穩(wěn)定的地方就是,如果單邊機出現(xiàn)一些不可預(yù)測是耗時操作影響發(fā)送速度,recv會長時間的阻塞。這時就留下一個難題,是設(shè)置足夠長的時間等待還是規(guī)定時間關(guān)閉連接。給方便權(quán)衡之下選擇使用默認超時。給socket一個‘復(fù)活’的機會

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,355評論 6 13
  • iPhone的標準推薦是CFNetwork 庫編程,其封裝好的開源庫是 cocoa AsyncSocket庫,用它...
    Ethan_Struggle閱讀 2,357評論 2 12
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,077評論 1 13
  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,192評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,353評論 6 174

友情鏈接更多精彩內(nèi)容