资源简介
使用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聊天室
相关资源
- 基于V4L2的视频采集,能够采集YUVJPE
- RTMP_H265推流直播技术研讨
- 在线直播教育平台网站模板完整代码
- FFmpeg 采集摄像头输出rtmp直播流媒体,
- 自学编程创新意:livecoding.tv实时直播
- H264实时编码RTSP直播
- 华为高清EC2108EC1308破解港台华人直播
- 论文研究 - 直播种子的产量响应
- 对啊直播课堂 v3.0.0.0.zip
- ffmpeg实现直播功能
- 直播采集源码
- 小智-微直播 3.6.2 传播分享版 原版功
- web端直播间后台管理系统.rp
- 手机USB摄像头直播及服务器推流手机
- 直播平台原型设计含后台
- 小智-微直播模块V3.6.7开源.zip
- 基于QT的网络视频直播软件
- qt5_V4L2_Camera 实现摄像头实时画面显示
- v4l2中文手册(规范)全五章(包含驱
- 宋宝华全部直播课程资料AND课件
- rtmp+nginx实现rtmp直播
- 键盘可视化软件Carnac
- m3u8直播下载127830
- 直播流保存为视频文件
- windows版nginx(1.19.3)包含nginx-http-fl
- 萤石云摄像头直播带云台控制代码
- live555Camera摄像头直播
- 项目08 流媒体直播和点播服务的架设
- USB摄像头通过v4l2技术采集、储存视频
- V4L2采集YUYV数据x264编码成H264视频
评论
共有 条评论