赞
踩
先看下效果
Demo版本限制了只支持两个通道 每个通道只能连接一个客户端
FULL版本 没有这个限制 需要全功能版本 请联系博主
功能说明如下:
下面看下调用说明
首先是头文件
- /***************************************************************************************
- Created by QMCY 20230223
-
- ****************************************************************************************/
-
- #ifndef RTSP_ADVOCATOR_H
- #define RTSP_ADVOCATOR_H
-
-
- typedef void * rtsp_handle;
- typedef enum
- {
- QMCY_VIDEO_CODEC_H264 = 0,
- QMCY_VIDEO_CODEC_H265,
- QMCY_VIDEO_CODEC_JPEG,
- QMCY_VIDEO_CODEC_MP4,
- }QMCY_VIDEO_CODEC;
-
-
- typedef enum
- {
- QMCY_AUDIO_CODEC_NONE = 0,
- QMCY_AUDIO_CODEC_G711A,
- QMCY_AUDIO_CODEC_G711U,
- QMCY_AUDIO_CODEC_G726,
- QMCY_AUDIO_CODEC_AAC,
- QMCY_AUDIO_CODEC_G722,
- QMCY_AUDIO_CODEC_OPUS,
- }QMCY_AUDIO_CODEC;
-
-
-
- /*
- rtsp_init 参数说明:
- max_channels:支持的最大通道个数
- max_clients:每个通道最大连接数
- server_ip:服务端IP地址
- port:RTSP端口
- 返回rtsp 句柄 供后面的函数使用
-
- */
- rtsp_handle rtsp_init(int max_channels,int max_clients, char * server_ip,unsigned short port);
-
- /*
- rtsp_add_channel 参数说明:
- rtsp_handle:通过rtsp_init函数创建的句柄
- index:通道index 从0开始
- contain_video:是否包含视频
- contain_audio:是否包含音频
- video_type:视频编码格式H264/H265
- audio_type:目前支持支最常用的AAC格式
- audio_sampe_rate:aac音频的取样率
- audio_channels:音频单通道1,双通道设2
- suffix:rtsp后缀播放时通过suffix用来区分通道
- 成功返回true 失败返回false
- */
-
- bool rtsp_add_channel(rtsp_handle pHandle,int index,bool contain_video,bool contain_audio,
- QMCY_VIDEO_CODEC video_type,QMCY_AUDIO_CODEC audio_type,
- int audio_sampe_rate,int audio_channels,const char *suffix);
-
- /*
- Demo 版本不支持设置密码 FULL版本可以
- rtsp_set_auth_info
- auth_flag 是否需要密码认证
- count 支持多用户登录 这里指用户数目
- username 多用户用户名数组
- password 多用户密码
- */
-
- bool rtsp_set_auth_info(rtsp_handle pHandle,bool auth_flag,int count,const char**username,const char **password);
-
- /*
- rtsp_run 参数说明:
- 启动rtsp服务
- */
-
- void rtsp_run(rtsp_handle pHandle);
-
-
- /*
- rtsp_send_frame_video 参数说明:
- rtsp_handle:通过rtsp_init函数创建的句柄
- index:通道index
- data:视频数据
- size:视频数据大小
-
- */
-
- int rtsp_send_frame_video(rtsp_handle pHandle, int index,unsigned char *data, int size);
-
- /*
- rtsp_send_frame_audio 参数说明:AAC格式是需要去掉ADTS头的 数据
- rtsp_handle:通过rtsp_init函数创建的句柄
- index:通道index
- data:音频数据
- size:音频数据大小
-
- */
-
- int rtsp_send_frame_audio( rtsp_handle pHandle,int index,unsigned char *data, int size);
-
-
- /*
- rtsp_stop 参数说明:
- rtsp_handle:通过rtsp_init函数创建的句柄
- 此函数会自动释放rtsp_init创建的句柄 不需要后续释放操作
- */
-
- void rtsp_stop(rtsp_handle pHandle);
-
-
- #endif // RTSP_ADVOCATOR_H
-
-
测试demo mainh函数如下:
- int main(int argc, char *argv[])
- {
- bool ret = false;
- signal(SIGPIPE, SIG_IGN);
- signal(SIGINT, signal_handler);
- signal(SIGKILL, signal_handler);
- signal(SIGTERM, signal_handler);
-
- rtsp_handle handle = rtsp_init(2,3,"192.168.0.209",1234);
- if(handle == NULL)
- {
- return -1;
- }
-
- ret = rtsp_add_channel(handle,0, true,true, QMCY_VIDEO_CODEC_H264, QMCY_AUDIO_CODEC_AAC,
- 48000,2, "qmcy1.sdp");
-
- ret = rtsp_add_channel(handle,1, true,true, QMCY_VIDEO_CODEC_H265, QMCY_AUDIO_CODEC_AAC,
- 48000,2, "qmcy2.sdp");
- if(ret == false)
- {
- return -1 ;
- }
-
- g_flag = true;
-
- //For qmcy1.sdp
- pthread_t video_thread;
- pthread_t audio_thread;
- pthread_create(&video_thread, NULL, QMCY_TestReadVideo,handle);
- pthread_create(&audio_thread, NULL, QMCY_TestReadAudio, handle);
-
- //For qmcy2.sdp
- pthread_t video_thread2;
- pthread_t audio_thread2;
- pthread_create(&video_thread2, NULL, QMCY_TestReadVideoEx,handle);
- pthread_create(&audio_thread2, NULL, QMCY_TestReadAudioEx, handle);
-
- rtsp_run(handle);
-
- while(g_flag)
- {
- sleep(1);
- }
-
- pthread_join(video_thread,NULL);
- pthread_join(audio_thread,NULL);
- pthread_join(video_thread2,NULL);
- pthread_join(audio_thread2,NULL);
-
- rtsp_stop(handle);
- printf("QMCY RTSP server exit normally !!!!!\n");
- return 0;
- }
makefile内容如下:
- CC := g++
-
- CC=g++
- CFLAGS:= -std=c++11 -g
- CFLAGS += -I/home/QMCY/FFmpeg-n4.3.2/install_ubunt/include
-
-
- LIBPATH += -L/home/QMCY/FFmpeg-n4.3.2/install_ubunt/lib
- LIBPATH += -L./
-
-
- LIBNAME := -lavformat -lavcodec -lavutil -lswscale -lswresample -lavdevice -lpthread -ldl -lz -llzma -lrtsp
-
-
-
- SRCS+=rtsp_example.cpp
-
- OBJS=$(SRCS:.cpp=.o)
-
- EXEC=advocator
-
- start:$(OBJS)
- $(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBPATH) $(LIBNAME)
- .cpp.o:
- $(CC) $(CFLAGS) -o $@ -c $<
- clean:
- rm -rf $(OBJS)
测试例子中使用了FFMPEG进行拉RTSP流测试 所以需要引入ffmpeg库
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。