<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • rtmp播放器解析接口(視頻RTMP推流實踐)


    對應RTMP推流,業界有很多開源方案。如使用FFMPEG推流,librtmp(rtmp-dump),gstream推流。由于ffmpeg和gstreamer比較龐大,僅僅用來推流,有大炮打蚊子之嫌。針對客戶端特別是瘦客戶端,使用librtmp(rtmp-dump)方案更加精簡,更加高效。

    本方案基本思路:視頻RTMP推流實踐

    RTMP視頻推流流程

    1. 下載并編譯librtmp。

    下載地址:
    http://rtmpdump.mplayerhq.hu/download/

    編譯后產生一個librtmp.so 庫

    2. 調用librtmp,封裝一個視頻層Wrapper_RtmpLib.cpp,該類定義如下:

     1class Wrapper_RtmpLib
     2
     3{
     4
     5public:
     6
     7       Wrapper_RtmpLib(char * url);
     8
     9       ~Wrapper_RtmpLib();
    10
    11      int Open();
    12
    13      int SendData(char * data,int dataLength, unsigned int timeStamp,int debug = -1);
    14
    15      int IsConnect();
    16
    17      int Close();
    18
    19private:
    20
    21     int InitSockets();
    22
    23     void CleanupSockets();
    24
    25     int pushSPSPPS(char *sps, int spsLen, char *pps, int ppsLen, int m_stream_id,unsigned int timeStamp);
    26
    27     int pushVideoData(char *data, int dataLen, bool keyFrame, int m_stream_id,unsigned int timeStamp);
    28
    29     int GetStartPrixLen(char *Pack, int offest);
    30
    31     char * rtmpUrl = NULL;
    32
    33     RTMP * m_pRtmp = NULL;
    34
    35     NALU * CopyNALU(NALU * src);
    36
    37     void FreeNALU(NALU * nalu);
    38
    39};

    3. Wrapper_RtmpLib對外提供RTMP推流接口。

    基本使用步驟:

    1. 定義一個Wrapper_RtmpLib對象test

    2. Test.open(),與服務器建立rtmp信令相關連接

    3. int SendData(char * data,int dataLength, unsigned int timeStamp,int debug = -1);發送RTMP數據

    注意data,必須是一個完整的NAL單元。所以應用程序調該接口前必須解析出NAL單元。

    下面是一個h264裸文件推送RTMP過程。

    基本思路如下:

    讀文件—-解析NAL單元—利用 SendData發送一個完成的NAL單元完成推流

    編譯main.cpp Wrapper_RtmpLib.cpp 并鏈接librtmp.so生成可執行文件h2642rtmp.視頻RTMP推流實踐

    編譯生成可執行文件

    運行可執行程序推流

    ./h264tortmp avc.h264 rtmp://192.168.1.226:8085/live/1830562240700540100 25

    使用該方案注意:

    1. SendData 必須是一個完整的NAL單元。如果是文件需要解析或網絡流必須解析出NAL單元

    2. 時間戳采用間隔時間。即時間戳按每幀時間間隔遞增,可能因為網絡抖動或者1000/幀率不是幀率會存在累計誤差。該demo因為不存在音視頻同步,時間戳影響不大。

    3.如果是云主機,在云主機內不能推公網IP,而要推內網IP 192.168.1.226,客戶端訪問需要外網IP。

    客戶端播放效果如下:視頻RTMP推流實踐

    RTMP流web端播放效果

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费