資源簡介
使用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
- 上一篇:ImportREC 1.7e
- 下一篇:基于ajax的web聊天室
評論
共有 條評論