最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)
=====================================================
最簡單的基于libRTMP的示例系列文章列表:
最簡單的基于librtmp的示例:接收(RTMP保存為FLV)
最簡單的基于librtmp的示例:發(fā)布(FLV通過RTMP發(fā)布)
最簡單的基于librtmp的示例:發(fā)布H.264(H.264通過RTMP發(fā)布)
=====================================================
本文記錄一個基于libRTMP的發(fā)布H.264碼流的程序。該程序可以將H.264數(shù)據(jù)發(fā)布到RTMP流媒體服務(wù)器。目前這個例子還不是很穩(wěn)定,下一步還有待修改。
本程序使用回調(diào)函數(shù)作為輸入,通過自定義的回調(diào)函數(shù),可以發(fā)送本地的文件或者內(nèi)存中的數(shù)據(jù)。
函數(shù)調(diào)用結(jié)構(gòu)圖
本程序的函數(shù)調(diào)用結(jié)構(gòu)圖如下所示。
整個程序包含3個接口函數(shù):RTMP264_Connect():建立RTMP連接。
RTMP264_Send():發(fā)送數(shù)據(jù)。
RTMP264_Close():關(guān)閉RTMP連接。
按照順序調(diào)用上述3個接口函數(shù)就可以完成H.264碼流的發(fā)送。
結(jié)構(gòu)圖中關(guān)鍵函數(shù)的作用如下所列。
RTMP264_Connect()中包含以下函數(shù):
InitSockets():初始化Socket
RTMP_Alloc():為結(jié)構(gòu)體“RTMP”分配內(nèi)存。
RTMP_Init():初始化結(jié)構(gòu)體“RTMP”中的成員變量。
RTMP_SetupURL():設(shè)置輸入的RTMP連接的URL。
RTMP_EnableWrite():發(fā)布流的時候必須要使用。如果不使用則代表接收流。
RTMP_Connect():建立RTMP連接,創(chuàng)建一個RTMP協(xié)議規(guī)范中的NetConnection。
RTMP_ConnectStream():創(chuàng)建一個RTMP協(xié)議規(guī)范中的NetStream。
RTMP264_Send()中包含以下函數(shù):
ReadFirstNaluFromBuf():從內(nèi)存中讀取出第一個NAL單元。
ReadOneNaluFromBuf():從內(nèi)存中讀取出一個NAL單元。
h264_decode_sps():解碼SPS,獲取視頻的寬,高,幀率信息。
SendH264Packet():發(fā)送一個NAL單元。
SendH264Packet()中包含以下函數(shù):
SendVideoSpsPps():如果是關(guān)鍵幀,則在發(fā)送該幀之前先發(fā)送SPS和PPS。
SendPacket():組裝一個RTMPPacket,調(diào)用RTMP_SendPacket()發(fā)送出去。
RTMP_SendPacket():發(fā)送一個RTMP數(shù)據(jù)RTMPPacket。
RTMP264_Close()中包含以下函數(shù):
RTMP_Close():關(guān)閉RTMP連接。
RTMP_Free():釋放結(jié)構(gòu)體“RTMP”。
CleanupSockets():關(guān)閉Socket。
源代碼
程序提供的3個接口函數(shù)的使用方法如下。可以看出接口比較簡單。
[cpp]?view plaincopy
接口函數(shù)內(nèi)部的代碼比較多,不再詳細記錄。
下載
Simplest LibRTMP Example
項目主頁
SourceForge:https://sourceforge.net/projects/simplestlibrtmpexample/
Github:https://github.com/leixiaohua1020/simplest_librtmp_example
開源中國:http://git.oschina.net/leixiaohua1020/simplest_librtmp_example
CSDN下載: http://download.csdn.net/detail/leixiaohua1020/8291757
本工程包含了LibRTMP的使用示例,包含如下子工程:
simplest_librtmp_receive: 接收RTMP流媒體并在本地保存成FLV格式的文件。
simplest_librtmp_send_flv: 將FLV格式的視音頻文件使用RTMP推送至RTMP流媒體服務(wù)器。
simplest_librtmp_send264: 將內(nèi)存中的H.264數(shù)據(jù)推送至RTMP流媒體服務(wù)器。
總結(jié)
以上是生活随笔為你收集整理的最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyRTMP实现的rtmp推流的基本
- 下一篇: RTMPdump(libRTMP) 源代