最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)
=====================================================
最簡單的基于libRTMP的示例系列文章列表:
最簡單的基于librtmp的示例:接收(RTMP保存為FLV)
最簡單的基于librtmp的示例:發布(FLV通過RTMP發布)
最簡單的基于librtmp的示例:發布H.264(H.264通過RTMP發布)
=====================================================
本文記錄一個基于libRTMP的發布H.264碼流的程序。該程序可以將H.264數據發布到RTMP流媒體服務器。目前這個例子還不是很穩定,下一步還有待修改。
本程序使用回調函數作為輸入,通過自定義的回調函數,可以發送本地的文件或者內存中的數據。
函數調用結構圖
本程序的函數調用結構圖如下所示。
整個程序包含3個接口函數:RTMP264_Connect():建立RTMP連接。
RTMP264_Send():發送數據。
RTMP264_Close():關閉RTMP連接。
按照順序調用上述3個接口函數就可以完成H.264碼流的發送。
結構圖中關鍵函數的作用如下所列。
RTMP264_Connect()中包含以下函數:
InitSockets():初始化Socket
RTMP_Alloc():為結構體“RTMP”分配內存。
RTMP_Init():初始化結構體“RTMP”中的成員變量。
RTMP_SetupURL():設置輸入的RTMP連接的URL。
RTMP_EnableWrite():發布流的時候必須要使用。如果不使用則代表接收流。
RTMP_Connect():建立RTMP連接,創建一個RTMP協議規范中的NetConnection。
RTMP_ConnectStream():創建一個RTMP協議規范中的NetStream。
RTMP264_Send()中包含以下函數:
ReadFirstNaluFromBuf():從內存中讀取出第一個NAL單元。
ReadOneNaluFromBuf():從內存中讀取出一個NAL單元。
h264_decode_sps():解碼SPS,獲取視頻的寬,高,幀率信息。
SendH264Packet():發送一個NAL單元。
SendH264Packet()中包含以下函數:
SendVideoSpsPps():如果是關鍵幀,則在發送該幀之前先發送SPS和PPS。
SendPacket():組裝一個RTMPPacket,調用RTMP_SendPacket()發送出去。
RTMP_SendPacket():發送一個RTMP數據RTMPPacket。
RTMP264_Close()中包含以下函數:
RTMP_Close():關閉RTMP連接。
RTMP_Free():釋放結構體“RTMP”。
CleanupSockets():關閉Socket。
源代碼
程序提供的3個接口函數的使用方法如下??梢钥闯鼋涌诒容^簡單。
[cpp]?view plaincopy
接口函數內部的代碼比較多,不再詳細記錄。
下載
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流媒體服務器。
simplest_librtmp_send264: 將內存中的H.264數據推送至RTMP流媒體服務器。
總結
以上是生活随笔為你收集整理的最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyRTMP实现的rtmp推流的基本
- 下一篇: RTMPdump(libRTMP) 源代