当前位置:   article > 正文

Linux 平台 RTSP server项目开发总结_linux rtsp服务器

linux rtsp服务器

先看下效果

 

 

Demo版本限制了只支持两个通道  每个通道只能连接一个客户端

FULL版本 没有这个限制 需要全功能版本 请联系博主

so库和测试demo可以点击这里下载

功能说明如下:

  1. 视频支持H264/H265
  2. 音频支持AAC
  3. 只支持LIVE 不支持文件点播
  4. 支持TCP/UDP
  5. 不支持RTCP
  6. 支持多用户认证(DEMO版本无)
  7. IO复用模型采用流行的EPOLL模式
  8. 支持多通道 任意多连接(只要内存网络带宽够 DEMO版本做了限制 )
  9. 基于linux开发 所以支持很多以linux为平台的嵌入式系统比如 海思 瑞芯微 android等等 指定工具编译链即可

下面看下调用说明

首先是头文件

  1. /***************************************************************************************
  2. Created by QMCY 20230223
  3. ****************************************************************************************/
  4. #ifndef RTSP_ADVOCATOR_H
  5. #define RTSP_ADVOCATOR_H
  6. typedef void * rtsp_handle;
  7. typedef enum
  8. {
  9. QMCY_VIDEO_CODEC_H264 = 0,
  10. QMCY_VIDEO_CODEC_H265,
  11. QMCY_VIDEO_CODEC_JPEG,
  12. QMCY_VIDEO_CODEC_MP4,
  13. }QMCY_VIDEO_CODEC;
  14. typedef enum
  15. {
  16. QMCY_AUDIO_CODEC_NONE = 0,
  17. QMCY_AUDIO_CODEC_G711A,
  18. QMCY_AUDIO_CODEC_G711U,
  19. QMCY_AUDIO_CODEC_G726,
  20. QMCY_AUDIO_CODEC_AAC,
  21. QMCY_AUDIO_CODEC_G722,
  22. QMCY_AUDIO_CODEC_OPUS,
  23. }QMCY_AUDIO_CODEC;
  24. /*
  25. rtsp_init 参数说明:
  26. max_channels:支持的最大通道个数
  27. max_clients:每个通道最大连接数
  28. server_ip:服务端IP地址
  29. port:RTSP端口
  30. 返回rtsp 句柄 供后面的函数使用
  31. */
  32. rtsp_handle rtsp_init(int max_channels,int max_clients, char * server_ip,unsigned short port);
  33. /*
  34. rtsp_add_channel 参数说明:
  35. rtsp_handle:通过rtsp_init函数创建的句柄
  36. index:通道index 从0开始
  37. contain_video:是否包含视频
  38. contain_audio:是否包含音频
  39. video_type:视频编码格式H264/H265
  40. audio_type:目前支持支最常用的AAC格式
  41. audio_sampe_rate:aac音频的取样率
  42. audio_channels:音频单通道1,双通道设2
  43. suffix:rtsp后缀播放时通过suffix用来区分通道
  44. 成功返回true 失败返回false
  45. */
  46. bool rtsp_add_channel(rtsp_handle pHandle,int index,bool contain_video,bool contain_audio,
  47. QMCY_VIDEO_CODEC video_type,QMCY_AUDIO_CODEC audio_type,
  48. int audio_sampe_rate,int audio_channels,const char *suffix);
  49. /*
  50. Demo 版本不支持设置密码 FULL版本可以
  51. rtsp_set_auth_info
  52. auth_flag 是否需要密码认证
  53. count 支持多用户登录 这里指用户数目
  54. username 多用户用户名数组
  55. password 多用户密码
  56. */
  57. bool rtsp_set_auth_info(rtsp_handle pHandle,bool auth_flag,int count,const char**username,const char **password);
  58. /*
  59. rtsp_run 参数说明:
  60. 启动rtsp服务
  61. */
  62. void rtsp_run(rtsp_handle pHandle);
  63. /*
  64. rtsp_send_frame_video 参数说明:
  65. rtsp_handle:通过rtsp_init函数创建的句柄
  66. index:通道index
  67. data:视频数据
  68. size:视频数据大小
  69. */
  70. int rtsp_send_frame_video(rtsp_handle pHandle, int index,unsigned char *data, int size);
  71. /*
  72. rtsp_send_frame_audio 参数说明:AAC格式是需要去掉ADTS头的 数据
  73. rtsp_handle:通过rtsp_init函数创建的句柄
  74. index:通道index
  75. data:音频数据
  76. size:音频数据大小
  77. */
  78. int rtsp_send_frame_audio( rtsp_handle pHandle,int index,unsigned char *data, int size);
  79. /*
  80. rtsp_stop 参数说明:
  81. rtsp_handle:通过rtsp_init函数创建的句柄
  82. 此函数会自动释放rtsp_init创建的句柄 不需要后续释放操作
  83. */
  84. void rtsp_stop(rtsp_handle pHandle);
  85. #endif // RTSP_ADVOCATOR_H

测试demo mainh函数如下:

  1. int main(int argc, char *argv[])
  2. {
  3. bool ret = false;
  4. signal(SIGPIPE, SIG_IGN);
  5. signal(SIGINT, signal_handler);
  6. signal(SIGKILL, signal_handler);
  7. signal(SIGTERM, signal_handler);
  8. rtsp_handle handle = rtsp_init(2,3,"192.168.0.209",1234);
  9. if(handle == NULL)
  10. {
  11. return -1;
  12. }
  13. ret = rtsp_add_channel(handle,0, true,true, QMCY_VIDEO_CODEC_H264, QMCY_AUDIO_CODEC_AAC,
  14. 48000,2, "qmcy1.sdp");
  15. ret = rtsp_add_channel(handle,1, true,true, QMCY_VIDEO_CODEC_H265, QMCY_AUDIO_CODEC_AAC,
  16. 48000,2, "qmcy2.sdp");
  17. if(ret == false)
  18. {
  19. return -1 ;
  20. }
  21. g_flag = true;
  22. //For qmcy1.sdp
  23. pthread_t video_thread;
  24. pthread_t audio_thread;
  25. pthread_create(&video_thread, NULL, QMCY_TestReadVideo,handle);
  26. pthread_create(&audio_thread, NULL, QMCY_TestReadAudio, handle);
  27. //For qmcy2.sdp
  28. pthread_t video_thread2;
  29. pthread_t audio_thread2;
  30. pthread_create(&video_thread2, NULL, QMCY_TestReadVideoEx,handle);
  31. pthread_create(&audio_thread2, NULL, QMCY_TestReadAudioEx, handle);
  32. rtsp_run(handle);
  33. while(g_flag)
  34. {
  35. sleep(1);
  36. }
  37. pthread_join(video_thread,NULL);
  38. pthread_join(audio_thread,NULL);
  39. pthread_join(video_thread2,NULL);
  40. pthread_join(audio_thread2,NULL);
  41. rtsp_stop(handle);
  42. printf("QMCY RTSP server exit normally !!!!!\n");
  43. return 0;
  44. }

makefile内容如下:

  1. CC := g++
  2. CC=g++
  3. CFLAGS:= -std=c++11 -g
  4. CFLAGS += -I/home/QMCY/FFmpeg-n4.3.2/install_ubunt/include
  5. LIBPATH += -L/home/QMCY/FFmpeg-n4.3.2/install_ubunt/lib
  6. LIBPATH += -L./
  7. LIBNAME := -lavformat -lavcodec -lavutil -lswscale -lswresample -lavdevice -lpthread -ldl -lz -llzma -lrtsp
  8. SRCS+=rtsp_example.cpp
  9. OBJS=$(SRCS:.cpp=.o)
  10. EXEC=advocator
  11. start:$(OBJS)
  12. $(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBPATH) $(LIBNAME)
  13. .cpp.o:
  14. $(CC) $(CFLAGS) -o $@ -c $<
  15. clean:
  16. rm -rf $(OBJS)

测试例子中使用了FFMPEG进行拉RTSP流测试 所以需要引入ffmpeg库 

可以点击这里下载全部文件 路径更改成自己的路径即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/611171
推荐阅读
相关标签
  

闽ICP备14008679号