1.ZLMediaKit 服务器源码解读---RTSP推流拉流
2.Windows端ZLMediaKit编译与webrtc推拉流测试
3.浏览器监视RTSP摄像头
4.音视频开源项目ZLMediaKit 的码解安装及使用介绍
5.2024年 C++音视频开发学习路线(ffmpeg/rtsp/srs/webrtc/hls)
6.常见流媒体服务器方案对比分析
ZLMediaKit 服务器源码解读---RTSP推流拉流
RTSP推流与拉流在ZLMediaKit服务器源码中有着清晰的解析过程和处理逻辑。数据解析通过回调到达RtspSession类的码解onRecv函数,进而进行分包处理,码解头部数据与内容分离。码解根据头部信息判断数据包类型,码解rtp包与rtsp包分别由onRtpPacket和onWholeRtspPacket函数处理。码解axios 源码阅读
RTSP处理过程中,码解解析出的码解交互命令被分发至不同的处理函数。对于rtp包处理,码解数据封装成rtp包后,码解执行onBeforeRtpSorted函数进行排序,码解排序后的码解数据放入缓存map,最终回调到RtspSession的码解onRtpSorted函数。这里,码解回调数据进入RtspMediaSourceImp成员变量,码解该变量指向RtspDemuxer解复用器,用于H等视频格式的解复用。
在H解复用器中,rtp包经过一系列处理后,由HRtpDecoder类的decodeRtp函数转化为H帧数据,最终通过RtpCodec::inputFrame函数分发至代理类。代理类在处理H帧数据时,分包并添加必要参数(如pps、sps信息),然后通过map对象将数据传递给多个接收者。
处理完H帧后,数据将流转至编码阶段。在RtspMediaSourceImp中,H帧数据被传递至MultiMediaSourceMuxer编码类。在编码过程中,数据通过RtspMuxer的inputFrame接口进入编码器HRtpEncoder,最后被打包成rtp包,准备分发。
总结而言,RTSP推流过程主要包含数据解析、视频解复用与编码三个关键步骤。在拉流阶段,通过鉴权成功后获取推流媒体源,利用play reader从缓存中取出rtp包并发送给客户端。
Windows端ZLMediaKit编译与webrtc推拉流测试
在编译与测试Windows端的ZLMediaKit及webrtc推拉流过程中,我特别记录下详细的步骤。若无需进行webrtc测试,仅需编译ZLMediaKit,则可省略安装libsrtp的hadoop2.5 源码步骤。
编译环境
使用Windows 操作系统,配备OpenSSL版本WinOpenSSL-1_1_1q,cmake版本为3..0,Visual Studio版本为vs。
编译准备工作
首先,安装openssl。Windows下的安装方式无需赘述,只需下载对应的版本安装包,安装完成后确保将openssl安装路径、bin目录和lib目录的路径添加至Windows的系统环境变量Path中。
接着,安装libsrtp。
下载最新libsrtp源码zip包,解压至指定位置。新建build文件夹。确认openssl环境变量已配置。利用cmake-gui工具,分别设置libsrtp源代码和build文件夹路径。在弹出的配置界面,选择vs和win,勾选BUILD_SHARED_LIBS和ENABLE_OPENSSL。同时,修改CMAKE_INSTALL_PREFIX为libsrtp安装目录。完成配置后,依次点击Generate和Open Project,使用vs打开解决方案并生成install工程,完成libsrtp的安装。最后,确保libsrtp安装根目录和libsrtp build文件夹(Debug或Release)路径已配置至Windows的系统环境变量Path中。
编译ZLMediaKit
依据配置完成的步骤编译ZLMediaKit源码。
测试webrtc推拉流
至此,我们完成了Windows端ZLMediaKit的编译,并准备进行webrtc推拉流的测试。具体的测试步骤将另文详细记录。
浏览器监视RTSP摄像头
随着时代的发展,安防系统通过通用浏览器观看监控画面成为常态。然而,RTSP协议的摄像头需要WebRTC协议接收视频流,导致传输协议不兼容问题。既然底层传输协议无法直接互通,有无其他解决办法?答案是肯定的,通过服务器中转实现RTSP与WebRTC的互通。架构包括RTSP服务端接收RTSP协议摄像头流,java在线订餐源码服务器内部转码后,再使用WebRTC协议传输至WebRTC客户端,实现两者间的无缝连接。此方案能简化架构,提高效率,尤其当两个不同终端连接同一服务器时。
RTSP协议作为历史悠久的实时流传输协议,分为信令和传输两部分。信令用于建立数据通道,传输则用于发送音视频数据。RTSP信令主要包括OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、ANNOUNCE、RECORD和GET_PARAMETER等。了解这些信令的使用,有助于推流和拉流过程的实现。
RTSP推流过程:RTSP客户端首先向服务端发送OPTIONS信令查询支持的信令,服务端返回所支持的信令列表,客户端再发送ANNOUNCE信令并附上SDP文件,服务端解析后返回确认响应,随后客户端发送SETUP信令设置推流通道,完成推流。
RTSP拉流过程:客户端同样先发送OPTIONS信令获取服务端支持的信令,随后发送DESCRIBE信令获取可拉取的音视频流信息,解析SDP文件后,客户端发送SETUP信令并开始从服务器拉取音视频流。
SDP协议用于描述会话信息,包括会话层和媒体层。会话层包含版本、名称、会话时间等信息,媒体层描述会话包含哪些媒体,如音频和视频,其中可包含多个媒体描述。通过SDP文件,客户端能获取到详细的媒体信息,以便进行推流或拉流操作。
搭建RTSP环境时,可以使用开源的sql网页注册源码RTSP服务器,如EasyDarwin、ZLMediaKit等。以ZLMediaKit为例,搭建过程包括配置服务器、启动服务,然后使用ffmpeg进行音视频流的推流。当ZLMediaKit运行后,使用ffplay拉取RTSP流进行观看。
ZLMediaKit支持WebRTC协议,通过服务器中转,能够将RTSP协议的音视频流转换为WebRTC兼容格式,实现WebRTC客户端观看RTSP摄像头流。尽管具体实现细节未详尽说明,但通过解析SDP文件,服务器能将RTSP流按照WebRTC协议要求重新打包,转发给WebRTC客户端。
本文重点介绍了RTSP协议的推流和拉流流程,以及如何通过服务器中转实现RTSP与WebRTC的互通。对于希望在浏览器中监控RTSP摄像头的企业,已有成熟的解决方案。了解RTSP协议的细节和使用场景,可以帮助快速实现相关功能。对于SDP解析、信令交互等细节感兴趣的读者,可通过阅读EasyDarwin或ZLMediaKit的源代码,进一步深入了解实现过程。
音视频开源项目ZLMediaKit 的安装及使用介绍
ZLMediaKit是一个功能强大的开源流媒体服务器,特别适合实时音视频传输和处理应用,如直播、视频会议和监控。它支持RTSP、RTMP、HLS和HTTP-FLV等协议,具有低延迟和高并发处理能力,且能动态转码,并跨平台运行。 要开始使用,首先从GitHub地址github.com/xia-chu/ZLMe...下载源代码。编译安装步骤适用于Linux环境,运行时可通过其HTTP API进行管理。API接口包括控制流媒体播放、获取状态信息、统计信息,文物管理系统源码以及配置服务器参数等,如:启动/停止流媒体:通过发送HTTP请求来控制。
查看状态和统计:获取服务器连接数、流状态和带宽使用情况等。
配置参数:如设置网络端口、转码设置和录制选项。
录制与截图:支持控制服务器的录制和截图功能。
实时监控:通过HTTP API监控服务器运行和日志。
此外,HTTP API还支持通过UDP或TCP进行推流,例如循环播放视频,对于点播,ZLMediaKit支持通过mp4文件实现,例如rtsp://.../record/test.mp4,通过HTTP访问文件进行点播。 在Linux下,音频设备的管理也很关键,可以使用aplay、pactl等命令查看和配置音频设备。而服务的推拉流,包括设备向服务器推流和从服务器拉流,也是通过API和相应的命令来操作的。 最后,当遇到端口占用问题时,可以使用lsof和netstat命令在Linux中查找占用情况,以便进行相应的操作。ZLMediaKit的详细文档和更多视频教程可以在mirrors/xia-chu/zlmediakit/GitCode中找到。年 C++音视频开发学习路线(ffmpeg/rtsp/srs/webrtc/hls)
音视频工作领域繁复多样,自学时易陷入迷茫。本文整理出九个前景不错的方向:直播、传输、算法、视频播放器、流媒体后端、短视频、音频播放、视频编辑、图像处理。以下为详细学习路线: 音视频基础音频基础知识
视频基础知识
解复用基础知识
FFmpeg开发环境搭建
音视频开发常用工具
FFmpeg实战教程FFmpeg命令
SDL跨平台
FFmpeg基石精讲
FFmpeg过滤器
FFmpeg音视频解复用+解码
ffplay播放器
FFmpeg音视频编码+复用合成视频
ffmpeg多媒体
FFmpeg+ QT播放器
流媒体客户端RTMP推拉流项目实战
RTSP流媒体实战
HLS拉流分析
流媒体服务器SRS源码剖析协程
ZLMediaKit源码剖析
WebRTC项目实战WebRTC中级开发实践指南
WebRTC高级开发-SRS 4.0/5.0源码分析
WebRTC高级开发-MESH模型多人通话
WebRTC高级开发-Janus SFU模型多人通话
Android NDKAndroid NDK开发基础
Android FFmpeg编译和应用
Android RTMP推拉流
Android Ijkplayer源码分析
iOS音视频开发iOS FFmpeg 6.0编译和应用
iOS FFmpeg RTMP推拉流
VideoToolbox硬件编解码
iOS jkplayer编译和应用
iOS ijkplayer编译和应用
音视频项目实战 相关开源网站与地址 本文涵盖音视频全栈开发技术,适合各类技术人员。常见流媒体服务器方案对比分析
SRS
功能和稳定性大幅提升,易于上手,提供丰富功能和集群支持。配置步骤:获取源码、编译、运行。
主要功能:集群、协议网关、CDN功能等。支持概念完整性和简单实现。提供接入方案、流变换、集群特性、丰富接口、广泛应用。
EasyDarwin
由国内开源团队维护,Golang开发,支持快速构建流媒体服务平台。配置步骤:获取源码、运行。
主要功能:基于Golang、多系统平台部署、RTSP推流/拉流、服务端录像、关键帧缓存、Web后台管理、分布式负载均衡。
ZLMediaKit
高性能流媒体服务框架,支持多种协议,三大PC平台及iOS、Android两大移动端。配置步骤:获取源码、编译、运行。
主要功能:C++开发,多路复用/多线程/异步IO,海量客户端连接,全平台支持,秒开画面、极低延时,完善标准C API。
Monibuca
Go语言实现的流媒体服务器框架,采取引擎+插件方式,支持定制化功能。配置步骤:获取源码、安装monica、运行。
主要功能:优化Golang特性,利用goroutine合理分配资源,减少内存操作,功能强大仪表盘,直观服务器状态,纯Go编写,部署方便。
对比图表
ZLMediaKit教程(二)主程序和配置文件解析
在ZLMediaKit系列文章中,本文是关于主程序和配置文件解析的第二篇。当ZLMediaKit源码成功编译后,会生成主服务程序MediaServer,位于release/linux目录下。启动MediaServer的参数在帮助信息中详细列出,原作者对此精心解释,值得称赞。 默认情况下,MediaServer使用同目录下的config.ini作为配置文件,当然也可以通过-c参数指定其他路径的配置文件。接下来,我们将深入探讨配置文件中的各项配置及其含义。 配置文件中包含多个配置项,例如流媒体服务的基本设置、媒体文件的存储路径、播放端口、网络参数等。这些配置项对于确保流媒体服务稳定运行至关重要。 在完成配置文件的修改并保存后,通过在shell中输入killall -1 MediaServer命令,即可实现配置文件的热加载,无需先关闭服务再重新启动,极大提升了操作效率。 如果你对音视频开发感兴趣,或者对本文内容有独特见解,欢迎在下方的留言框与我们一起探讨,共享学习经验与技术成果。 为了更深入地了解音视频开发,这里推荐一些免费学习资源:音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
免费领取C++音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs等)有需要的可以点击加群领取哦~
了解更多音视频开发知识,欢迎访问ZLMediaKit教程(二)主程序和配置文件解析 - 资料 - 音视频开发中文网 - 构建全国最权威的音视频技术交流分享论坛。FFmpeg开发笔记(三十三)分析ZLMediaKit对H.流的插帧操作
在H.流的传输与接收过程中,分析器揭示了其开头的“SPS帧→PPS帧→IDR帧”结构,验证了网络传输的H.裸流是如何被接收端正确解析视频格式的。利用雷霄骅的H分析器,我们能直观地观察到流的构成,进而理解其编码原理。
为了更深入理解H.流的处理流程,我们以ZLMediaKit为例,探索其在推流序列插入I帧时的特殊处理。在ZLMediaKit的ext-codec/H.cpp源码中,我们发现了HTrack::inputFrame_l函数中对I帧的处理逻辑。一旦检测到I帧,程序会自动插入SPS与PPS等配置帧,确保流媒体服务器能正确地将MP4文件转化为H.裸流。
通过深入分析ZLMediaKit的代码,我们发现其在关键帧后插入SPS帧与PPS帧的机制,以保持H.裸流的顺序性与完整性。这些配置帧的插入是确保客户端能够正确解析并渲染视频画面的关键。若未添加SPS与PPS帧,客户端在拉取流时会遇到错误,显示“non-existing PPS 0 referenced”,表明缺少必要的配置信息。
综合来看,ZLMediaKit通过在每个关键帧前额外插入SPS帧和PPS帧,不仅维护了H.裸流的正确格式,还确保了客户端能够顺利解析和渲染视频内容,实现了高效的流媒体传输与播放体验。对于更深入的FFmpeg开发知识,推荐阅读《FFmpeg开发实战:从零基础到短视频上线》一书,了解更多关于流媒体处理与编码的实战技巧。
wvp-GB-pro的安装与调试
本文将深入探讨WVP-GB-pro的安装与调试过程,特别关注其与ZLMediaKit的集成。首先,我们比较了几种GB服务模型,最后选定gosip+ZLMediaKit、Monibuca插件式和WVP-GB-pro+ZLMediaKit,本章节将重点讲解后者。 要开始安装,你可以从GitHub或Gitee下载最新版本的WVP-PRO软件,它支持多种主流监控品牌设备,如海康威视和大华。 安装步骤如下:基础环境准备:首先,安装Docker并在其内构建Redis、MySQL和ZLMediaKit环境。Redis用于存储和缓存,MySQL用于数据库,ZLMediaKit负责媒体处理。
Docker安装Redis:检查版本、下载镜像,设置映射端口,确保正常运行。
MySQL Docker安装:参考相关技术文章,配置数据库连接参数。
ZLMediaKit Docker安装:利用官方提供的安装命令,快速集成到项目中。
WVP-GB-pro编译:从源代码仓库获取,配置静态网页、打包jar,并调整必要的配置参数。
配置要点:例如,上传文件限制(max-file-size: MB, max-request-size: MB)、网络连接(REDIS: host、port等)、数据库连接(JDBC类型、驱动等)、数据映射(mybatis)、HTTP和HTTPS设置,以及SIP服务器配置等。
以下是一些关键配置项的示例:上传文件限制:max-file-size: MB, max-request-size: MB
REDIS连接:host: ..., port: , DB: 6, password: , timeout:
JDBC配置:HikariDataSource类型,驱动com.mysql.cj.jdbc.Driver, ...
mybatis映射:map-underscore-to-camel-case: true
HTTP服务器设置:server: port:
HTTPS配置:enabled: false, key-store: xxx.jks, key-store-password: password
SIP服务器配置:IP: ..1., port:
在实际操作中,务必根据具体需求调整这些配置。务必注意,由于篇幅限制,部分详细教程链接和编译过程中的具体步骤已省略,建议查阅完整的文档或教程以确保每个环节的正确执行。 最后,对于媒体参数获取和测试,推荐使用Apifox查询接口index/api/getServerConfig,以及强大的测试工具GB_ServerPlatform,通过其Client目录下的工具进行平台信息查看和实时视频播放测试。通过以上详细的安装步骤和配置指南,相信您已经对WVP-GB-pro的安装与调试有了一定的理解。接下来,可以根据这些信息逐步实施,确保监控系统的顺利集成和运行。
ZLMediaKit教程(五)支持webrtc
ZLMediaKit教程(五)支持webrtc
WebRTC是什么
WebRTC是Web Real Time Communication的缩写,全称为网络实时通信,是由Google和多家大公司发起的一个开源项目。它通过JavaScript API实现了无插件的实时通信功能,促进了浏览器到浏览器的语音呼叫、视频聊天和文件共享等应用的快速发展。目前,大多数浏览器已经支持WebRTC。
实践过程
首先,需要安装OpenSSL,Ubuntu .对应的版本是1.1.1。如果操作系统版本较旧,可以从源码开始安装,命令如下。
接着,安装libsrtp,即Secure Realtime Transport Protocol,方法依然熟悉,包括configure、make和make install。
随后,进行ZLMediaKit的编译。在使用cmake进行编译时,需要关注输出信息,确保已开启webrtc功能。
编译完成后,生成的可执行文件位于release/linux/MediaServer目录下。
启动服务,使用ffmpeg将本地视频文件推送到服务器。
在Chrome浏览器中输入服务器IP地址..1.,选择6webrtc选项。由于没有证书,忽略HTTPS警告。设置分辨率,点击开始播放,播放器开始播放推送的视频。