This action will force synchronization from 高艳鹏/RtspServer, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
提供示例:传输H.264文件、传输AAC文件、同时传输H.264和AAC文件、采集摄像头数据编码传输、采集声卡数据编码传输
下载
# git clone git@github.com:ImSjt/RtspServer.git
编译
# cd RtspServer/
# make
编译之后在example/
目录下会生成h264_rtsp_server
、aac_rtsp_server
、h264_aac_rtsp_server
h264_rtsp_server:传输H.264格式的视频文件
aac_rtsp_server:传输AAC格式的音频文件
h264_aac_rtsp_server:同时传输音视频
另v4l2_rtsp_server
和alsa_rtsp_server
需要依赖别的库,默认不编译,稍后介绍
运行h264_rtsp_server
进入example
目录
# cd example/
运行h264_rtsp_server
# ./h264_rtsp_server test.h264
运行后会出现一行提示,其中url会随主机的ip改变
Play the media using the URL "rtsp://192.168.31.115:8554/live"
打开vlc,输入url,点击播放即可看到视频
效果
运行aac_rtsp_server
# ./aac_rtsp_server test.aac
运行h264_aac_rtsp_server
# ./h264_aac_rtsp_server test.h264 test.aac
采集v4l2摄像头是04_v4l2_rtsp_server.cpp
这个example,默认不会编译,这个示例相关的代码需要依赖x264库来编译,下面介绍使用步骤
编译安装x264
如何编译x264,网上有很多教程了,这里就不详细讲解了
将x264库放到Linux环境下,执行./configure,make,make install
注意编译后的库和头文件要安装到/usr/lib
和/usr/include
下
修改Makefile
将Makefile第一行
V4L2_SUPPORT=n
改为
V4L2_SUPPORT=y
重新编译
# make
编译过后在example/
目录下会出现v4l2_rtsp_server
运行v4l2_rtsp_server
# ./v4l2_rtsp_server /dev/video0
得到提示
Play the media using the URL "rtsp://192.168.31.115:8554/live"
在vlc输入url
效果
采集alsa音频设备是05_alsa_rtsp_server.cpp
这个example,默认不会编译,这个示例相关的代码需要依赖alsa-lib和libfaac来编译,下面介绍使用步骤
编译安装alsa-lib和libfacc
这里不详讲
一般步骤,执行./configure,make,make install
注意编译后的库和头文件要放到/usr/lib
和/usr/include
下
修改Makefile
将Makefile第二行
ALSA_SUPPORT=n
修改为
ALSA_SUPPORT=y
重新编译
# make
编译过后在example/
目录下会出现alsa_rtsp_server
运行alsa_rtsp_server
# ./alsa_rtsp_server hw:0,0
得到提示
Play the media using the URL "rtsp://192.168.31.115:8554/live"
输入url即可得到声卡采集到的声音
此项目默认时采用RTP_OVER_UDP,支持RTP_OVER_RTSP,如果需要测试,那么就需要设置vlc
工具
>>首选项
>>输入/编解码器
>>live555 流传输
>>RTP over RTSP(TCP)
然后随便运行一个example,在vlc输入url,此时就是使用RTP_OVER_RTSP
如果想测试多播,就需要修改example的示例
打开任意一个示例,将其中
//session->startMulticast();
这段屏蔽打开,然后重新编译运行,即可切换到多播
服务器模型
非阻塞IO,采用Reactor模型。使用线程池处理计算量比较大的任务(音视频文件处理,音视频数据采集与编码)
IO多路复用
支持select、poll、epoll
定时器
通过Linux提供的定时器timerfd_create
,将定时器文件描述符作为一个事件交给Reactor,定时器队列采用multimap
管理超时时间
日志
日志实现了前后端分离,前端负责格式化字符串然后发送给后端,后端启动一个线程,服务将数据写入磁盘中,使用了双缓冲技术
音视频数据采集与处理
音视频的采集与处理使用的生产者与消费者模式,数据采集为生产者,数据处理为消费者。生产者维护着一个循环队列,会往线程池中添加任务填充缓存,消费者有一个定时器,间隔一定时间就会向生产者取数据,并将数据RTP打包再传输
内存管理
内存管理分为前后端,前端使用类模板,灵活处理各种类型的对象的分配请求还有释放请求。后端主要是管理内存,提供内存的分配和释放。维护16个自由链表,每个链表维护着相同大小的内存块,分别从8、16、24到128。申请内存的时候,如果小于128字节则从相应的自由链表中获取内存块,如果大于128字节,则直接调用 malloc 进行分配。如果自由链表中没有内存块,那么就从缓冲区中申请一大块内存,然后切分成小块,插入到对应的自由链表中。释放内存的时候,如果小于128字节,那么就插入到对应的自由链表中,如果大于128字节,那么直接调用 free 释放内存
博客:程序员JT
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。