LiveRTMP内置IPCamera实现RTMP直播摄像机功能
LiveRTMP
LiveRTMP是LiveQing團隊開發(fā)的一套支持Windows、Linux、arm、Android、iOS等各種平臺的高效RTMP推送庫。
LiveRTMP接收的是標準的H264流和AAC音頻流。可以單獨推送H264,也可以音視頻混合推送。
##內(nèi)置進IPCamera
先初始化LiveRTMP和IPCamera的SDK,再調(diào)用IPCamera的SDK獲取IPCamera的實時視頻流。在實時流的回調(diào)中,調(diào)用LiveRTMP_SendPacket接口將音視頻流實時傳給LiveRTMP進行RTMP推送直播。值得注意的是如果需要推送音頻的話,音頻需要是AAC格式,如果沒有AAC流,可以通過第三方工具轉(zhuǎn)成AAC格式,如fdk-aac等。交叉編譯后內(nèi)置進IPCamera內(nèi)部,就可以將普通的IPCamera升級成RTMP直播攝像機。
Demo代碼
可參考代碼中LiveRTMP_SDK項目的代碼,這個Demo就是調(diào)用了攝像機的SDK獲取實時視頻流傳給LiveRTMP庫進行直播推送。如下代碼是SDK視頻流回調(diào)的處理,其他具體去下載代碼查看。
HI_S32 NETSDK_APICALL OnStreamCallback(HI_U32 u32Handle,HI_U32 u32DataType, HI_U8* pu8Buffer,HI_U32 u32Length,HI_VOID* pUserData) {HI_S_AVFrame* pstruAV = HI_NULL;HI_S_SysHeader* pstruSys = HI_NULL;if (u32DataType == HI_NET_DEV_AV_DATA){pstruAV = (HI_S_AVFrame*)pu8Buffer;if (pstruAV->u32AVFrameFlag == HI_NET_DEV_VIDEO_FRAME_FLAG){if(g_RtmpHandle == 0 ) return 0;if(pstruAV->u32AVFrameLen > 0){unsigned char* pbuf = (unsigned char*)(pu8Buffer+sizeof(HI_S_AVFrame));EASY_AV_Frame avFrame;memset(&avFrame, 0x00, sizeof(EASY_AV_Frame));avFrame.u32AVFrameLen = pstruAV->u32AVFrameLen;avFrame.pBuffer = (unsigned char*)pbuf;avFrame.u32VFrameType = (pstruAV->u32VFrameType==HI_NET_DEV_VIDEO_FRAME_I)?EASY_SDK_VIDEO_FRAME_I:EASY_SDK_VIDEO_FRAME_P;avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;avFrame.u32TimestampSec = pstruAV->u32AVFramePTS/1000;avFrame.u32TimestampUsec = (pstruAV->u32AVFramePTS%1000)*1000;EasyRTMP_SendPacket(g_RtmpHandle, &avFrame);} }elseif (pstruAV->u32AVFrameFlag == HI_NET_DEV_AUDIO_FRAME_FLAG){if(g_RtmpHandle == 0 ) return 0;EASY_AV_Frame avFrame;memset(&avFrame, 0x00, sizeof(EASY_AV_Frame));avFrame.u32AVFrameFlag = EASY_SDK_AUDIO_FRAME_FLAG;if(pstruAV->u32AVFrameLen <= 4) return 0;if(EasyInitAACEncoder(EASY_SDK_AUDIO_CODEC_G711A) == 0){memset(m_pAACEncBufer, 0, 64*1024);unsigned int iAACBufferLen = 0;unsigned char* pbuf = (unsigned char*)(pu8Buffer+sizeof(HI_S_AVFrame)) + 4;if(Easy_AACEncoder_Encode(g_pAACEncoderHandle, (unsigned char*)pbuf, pstruAV->u32AVFrameLen-4, m_pAACEncBufer, &iAACBufferLen) > 0){avFrame.pBuffer = (Easy_U8*)(m_pAACEncBufer);avFrame.u32AVFrameLen = iAACBufferLen; avFrame.u32TimestampSec = pstruAV->u32AVFramePTS/1000;avFrame.u32TimestampUsec = (pstruAV->u32AVFramePTS%1000)*1000;EasyRTMP_SendPacket(g_RtmpHandle, &avFrame);}} }}elseif (u32DataType == HI_NET_DEV_SYS_DATA){pstruSys = (HI_S_SysHeader*)pu8Buffer;printf("Video W:%u H:%u Audio: %u \n", pstruSys->struVHeader.u32Width, pstruSys->struVHeader.u32Height, pstruSys->struAHeader.u32Format);}return HI_SUCCESS; }獲取更多信息
郵件:support@liveqing.com
技術交流QQ群:615081503
咨詢電話:15156896292
LiveQing視頻流媒體無插件直播方案:www.liveqing.com
Copyright ? LiveQing Team 2016-2019
總結(jié)
以上是生活随笔為你收集整理的LiveRTMP内置IPCamera实现RTMP直播摄像机功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel中使用F-检验
- 下一篇: cin.tie与sync_with_st