• 大小: 677KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2024-01-25
  • 语言: 其他
  • 标签: TRMP  v4l2  直播  Linux  

资源简介

使用RTMPdump(libRTMP)直播来自v4l2的摄像头数据 ,详细内容见博客:http://blog.csdn.net/li_wen01/article/details/71548079

资源截图

代码片段和文件信息

/*=============================================================================  
 *     FileName: librtmp_send264.cpp
 *         Desc:  
 *       Author: licaibiao  
 *   LastChange: 2017-05-9   
 * =============================================================================*/  
#include 
#include 
#include 
#include “librtmp_send264.h“
#include “librtmp/log.h“

//定义包头长度,RTMP_MAX_HEADER_SIZE=18
#define RTMP_HEAD_SIZE   (sizeof(RTMPPacket)+RTMP_MAX_HEADER_SIZE)
//存储Nal单元数据的buffer大小
#define BUFFER_SIZE 32768
//搜寻Nal单元时的一些标志
#define GOT_A_NAL_CROSS_BUFFER  BUFFER_SIZE+1
#define GOT_A_NAL_INCLUDE_A_BUFFER  BUFFER_SIZE+2
#define NO_MORE_BUFFER_TO_READ  BUFFER_SIZE+3

//网络字节序转换
char * put_byte( char *output uint8_t nVal ){
output[0] = nVal;
return output+1;
}

char * put_be16(char *output uint16_t nVal ){
output[1] = nVal & 0xff;
output[0] = nVal >> 8;
return output+2;
}

char * put_be24(char *outputuint32_t nVal ){
output[2] = nVal & 0xff;
output[1] = nVal >> 8;
output[0] = nVal >> 16;
return output+3;
}
char * put_be32(char *output uint32_t nVal ){
output[3] = nVal & 0xff;
output[2] = nVal >> 8;
output[1] = nVal >> 16;
output[0] = nVal >> 24;
return output+4;
}
char *  put_be64( char *output uint64_t nVal ){
output=put_be32( output nVal >> 32 );
output=put_be32( output nVal );
return output;
}

char * put_amf_string( char *c const char *str ){
uint16_t len = strlen( str );
c=put_be16( c len );
memcpy(cstrlen);
return c+len;
}

char * put_amf_double( char *c double d ){
*c++ = AMF_NUMBER;  /* type: Number */
{
unsigned char *ci *co;
ci = (unsigned char *)&d;
co = (unsigned char *)c;
co[0] = ci[7];
co[1] = ci[6];
co[2] = ci[5];
co[3] = ci[4];
co[4] = ci[3];
co[5] = ci[2];
co[6] = ci[1];
co[7] = ci[0];
}
return c+8;
}

void librtmpLogCallback(int level const char *format va_list vl){
char* ansiStr = new char[1024];
char* logStr = new char[1024];

vsnprintf(ansiStr sizeof(ansiStr) - 1 format vl);
ansiStr[sizeof(ansiStr) - 1] = 0;

if (level == RTMP_LOGERROR){
printf(“librtmp Error: %s \n“ ansiStr);
}
else{
printf(“librtmp log: %s \n“ ansiStr);
}

delete[] ansiStr;
delete[] logStr;
}

RTMP* m_pRtmp;
RTMPmetadata metaData;

/**
 * 初始化并连接到服务器
 * @param url 服务器上对应webapp的地址
 * @isOpenPrintLog 是否打印日志  0不打印   1打印
 * @logType 日志类型
 * @成功则返回1  失败则返回0
 */
int RTMP264_Connect(const char* url RTMP** ppRtmp int isOpenPrintLog int logType){
//InitSockets();

m_pRtmp = RTMP_Alloc();
RTMP_Init(m_pRtmp);
m_pRtmp->link.lFlags |= RTMP_LF_LIVE;

if (isOpenPrintLog > 0) {
RTMP_LogSetCallback(librtmpLogCallback);
switch (logType){
case 0:
RTMP_LogSetLevel(RTMP_LOGCRIT);
break;
case 1:
RTMP_LogSetLevel(RTMP_LOGERROR);
break;
case 2:
RTMP_LogSetLevel(RTMP_LOGWARNING);
break;
case 3:
RTMP_LogSetLevel

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-05-10 10:21  libRTMP_live_v4l2-master\
     文件        1220  2017-05-10 10:21  libRTMP_live_v4l2-master\Makefile
     文件          91  2017-05-10 10:21  libRTMP_live_v4l2-master\README.md
     目录           0  2017-05-10 10:21  libRTMP_live_v4l2-master\include\
     文件        1433  2017-05-10 10:21  libRTMP_live_v4l2-master\include\.goutputstream-NZSZZY
     文件          42  2017-05-10 10:21  libRTMP_live_v4l2-master\include\.goutputstream-VJ59ZY
     文件         206  2017-05-10 10:21  libRTMP_live_v4l2-master\include\.goutputstream-Y83D0Y
     目录           0  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\
     文件        5786  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\amf.h
     文件        2630  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\bytes.h
     文件        9504  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\dh.h
     文件        9774  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\dhgroups.h
     文件       50580  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\handshake.h
     文件        1684  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\http.h
     文件        2290  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\log.h
     文件       11606  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\rtmp.h
     文件        5158  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp\rtmp_sys.h
     文件        1667  2017-05-10 10:21  libRTMP_live_v4l2-master\include\librtmp_send264.h
     文件        7022  2017-05-10 10:21  libRTMP_live_v4l2-master\include\sps_decode.h
     文件         678  2017-05-10 10:21  libRTMP_live_v4l2-master\include\v4l2_device.h
     文件       46899  2017-05-10 10:21  libRTMP_live_v4l2-master\include\x264.h
     文件         172  2017-05-10 10:21  libRTMP_live_v4l2-master\include\x264_config.h
     文件        4455  2017-05-10 10:21  libRTMP_live_v4l2-master\include\x264_encoder.h
     目录           0  2017-05-10 10:21  libRTMP_live_v4l2-master\lib\
     文件      154136  2017-05-10 10:21  libRTMP_live_v4l2-master\lib\librtmp.a
     文件     1765642  2017-05-10 10:21  libRTMP_live_v4l2-master\lib\libx264.a
     文件        8735  2017-05-10 10:21  libRTMP_live_v4l2-master\librtmp_send264.cpp
     文件        1846  2017-05-10 10:21  libRTMP_live_v4l2-master\main.cpp
     文件        7784  2017-05-10 10:21  libRTMP_live_v4l2-master\v4l2_device.cpp
     文件       10558  2017-05-10 10:21  libRTMP_live_v4l2-master\x264_encoder.cpp

评论

共有 条评论