EasyRTMP内置IPCamera实现RTMP直播摄像机功能
来源:互联网 发布:select to SQL 编辑:程序博客网 时间:2024/06/08 16:32
EasyRTMP
EasyRTMP是EasyDarwin团队开发的一套支持Windows、Linux、arm、Android、iOS等各种平台的高效RTMP推送库。
EasyRTMP接收的是标准的H264流和AAC音频流。可以单独推送H264,也可以音视频混合推送。
内置进IPCamera
先初始化EasyRTMP和IPCamera的SDK,再调用IPCamera的SDK获取IPCamera的实时视频流。在实时流的回调中,调用EasyRTMP_SendPacket接口将音视频流实时传给EasyRTMP进行RTMP推送直播。值得注意的是如果需要推送音频的话,音频需要是AAC格式,如果没有AAC流,可以通过第三方工具转成AAC格式,如fdk-aac等。交叉编译后内置进IPCamera内部,就可以将普通的IPCamera升级成RTMP直播摄像机。GitHub上提供了hisiv100、hisiv200、hisiv300、hisiv400、linux i386、linux x64、Windows版本的EasyRTMP库, 其他版本arm平台的EasyRTMP库,可以提供编译工具链给EasyDarwin团队获取对应的库文件。
Demo代码
代码在GitHub上,见文末链接。可参考代码中EasyRTMP_SDK项目的代码,这个Demo就是调用了摄像机的SDK获取实时视频流传给EasyRTMP库进行直播推送。如下代码是SDK视频流回调的处理,其他具体去下载代码查看。
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); } } else if (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); } } } } else if (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;}
下载地址
Demo代码下载:https://github.com/EasyDarwin/EasyRTMP
Android EasyRTMP版本下载:https://fir.im/easyrtmp
获取更多信息
邮件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2017
- EasyRTMP内置IPCamera实现RTMP直播摄像机功能
- EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能
- EasyRTMP内置进入摄像机中实现网络推流直播摄像机的功能
- EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能
- EasyRTMP实现Demux解析MP4文件进行rtmp推送实现RTMP直播功能
- EasyRTMP之对接海康、大华等IPCamera SDK进行RTMP直播推送(四)
- EasyRTMP实现RTMP异步直播推送之环形缓冲区设计
- EasyRTMP之RTMP直播高效推送缓冲区
- 基于EasyRTMP/EasyRTSPClient实现多路RTSP转RTMP流直播推送工具RTMPLive
- EasyHLS实现将IPCamera摄像机的RTSP流转成HLS(ts+m3u8)直播输出
- EasyRTMP推送RTSP视频源进行RTMP直播
- EasyRTMP+EasyRTSPClient实现的多路(支持断线重连)RTSP转RTMP直播推流工具
- EasyClient实现IPCamera摄像机远程云台控制、语音对讲等功能
- Android平台使用EasyRTMP将RTSP转RTMP流进行RTMP直播推送
- RTMP协议网络摄像机摄像机搭建视频直播系统
- 使用ffmpeg实现RTMP的直播推流功能
- RTMP直播效果实现
- EasyRTMP手机直播推流到EasyDSS进行RTMP直播过程中分辨率反复切换崩溃问题解决
- sys/time.h 是GCC的编译标准写法
- hdu2521 反素数(求约数个数)
- android studio 中 java.lang.NoClassDefFoundError:retrofit2.Retrofit$Builder错误解决
- warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:545)
- TensorFlow数据处理方法
- EasyRTMP内置IPCamera实现RTMP直播摄像机功能
- 索引并发(蟹行协议和B-Link树)
- 练习
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 算法提高 矩阵乘法
- vs中debug和release的区别
- 算法题——Missing Number(JAVA)
- Shader特效——BRDF 的实现【Unity Shader】
- 问题六十八:光照模型(Light model)——关于“环境光”模型的补充