外地車在上海需要注意什么(上海開外地車注意事項)
2024-08-28
更新時間:2024-08-28 09:00:11作者:佚名
對應RTMP推流,業(yè)界有很多開源方案。如使用FFMPEG推流,librtmp(rtmp-dump),gstream推流。由于ffmpeg和gstreamer比較龐大,僅僅用來推流,有大炮打蚊子之嫌。針對客戶端特別是瘦客戶端,使用librtmp(rtmp-dump)方案更加精簡,更加高效。
本方案基本思路:
RTMP視頻推流流程
1. 下載并編譯librtmp。
下載地址:
http://rtmpdump.mplayerhq.hu/download/
編譯后產(chǎn)生一個librtmp.so 庫
2. 調(diào)用librtmp,封裝一個視頻層Wrapper_RtmpLib.cpp,該類定義如下:
1classWrapper_RtmpLib 2 3{ 4 5public: 6 7Wrapper_RtmpLib(char*url); 8 9~Wrapper_RtmpLib();1011intOpen();1213intSendData(char*data,intdataLength,unsignedinttimeStamp,intdebug=-1);1415intIsConnect();1617intClose();1819private:2021intInitSockets();2223voidCleanupSockets();2425intpushSPSPPS(char*sps,intspsLen,char*pps,intppsLen,intm_stream_id,unsignedinttimeStamp);2627intpushVideoData(char*data,intdataLen,boolkeyFrame,intm_stream_id,unsignedinttimeStamp);2829intGetStartPrixLen(char*Pack,intoffest);3031char*rtmpUrl=NULL;3233RTMP*m_pRtmp=NULL;3435NALU*CopyNALU(NALU*src);3637voidFreeNALU(NALU*nalu);3839};
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);發(fā)送RTMP數(shù)據(jù)
注意data,必須是一個完整的NAL單元。所以應用程序調(diào)該接口前必須解析出NAL單元。
下面是一個h264裸文件推送RTMP過程。
基本思路如下:
讀文件—-解析NAL單元—利用 SendData發(fā)送一個完成的NAL單元完成推流
編譯main.cpp Wrapper_RtmpLib.cpp 并鏈接librtmp.so生成可執(zhí)行文件h2642rtmp.
編譯生成可執(zhí)行文件
運行可執(zhí)行程序推流
./h264tortmp avc.h264 rtmp://192.168.1.226:8085/live/1830562240700540100 25
使用該方案注意:
1. SendData 必須是一個完整的NAL單元。如果是文件需要解析或網(wǎng)絡流必須解析出NAL單元
2. 時間戳采用間隔時間。即時間戳按每幀時間間隔遞增,可能因為網(wǎng)絡抖動或者1000/幀率不是幀率會存在累計誤差。該demo因為不存在音視頻同步,時間戳影響不大。
3.如果是云主機,在云主機內(nèi)不能推公網(wǎng)IP,而要推內(nèi)網(wǎng)IP 192.168.1.226,客戶端訪問需要外網(wǎng)IP。
客戶端播放效果如下:
RTMP流web端播放效果