ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

这篇具有很好参考价值的文章主要介绍了ZLMediaKit流媒体服务器 RTSP推流时候的堆栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先直接看图 这是ffmpeg向流媒体服务器推流时候的堆栈 引入C++ 11之后  堆栈会显得特别繁复冗余 看起来 也没有 以前没有C++11之前那样 简单明了 

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 太复杂了 标记下  很多函数名字被我改了 因为原来的看起来 同名函数太多了

C++11 和lambada 匿名函数 让看堆栈 成了地狱模式 

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

断点断在  DemuxInputRtp 这个函数 这个是我改了名字的 之前是叫inputRtp 叫这个名字的函数太多了,所以给重新改了个名字  这样 看起来 会清晰一点 

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

从eventpoller里面的 RunLoop函数开始  慢慢开始看 

cb这个标黄的316行这里 

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 之后会走到 这个ReadData函数ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ReadData函数 中 不管UDP还是TCP都是通过recvfrom这个函数 从内核接收网络数据

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 正常流程会走到 _on_read这个回调

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

这个回调是在tcpserver onAcceptConnection中设置的 如下图

一般流程会走到onRecv那个回调去

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 这个onRecv回调就是创建tcpserver的时候 根据不同的类型 比如HttpSession  RtspSession 在其对应cpp文件中 去实现这个虚函数

我的工程中 没有全部按照官方的代码 走 很多地方 为了便捷 就服用了httpsession中的部分代码 

所以 我的代码中会走到HttpSession的onRecv中  这个ProcessData函数也是我重新命名了 

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 再看ProcessData函数 他会给收到的数据 组装或者拆分成对应的 head和 content数据

之后会调用 onRecvHeader或者 onContentRecv函数  这两个函数不同协议实现方式不一样

如下图

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

对于RTSP协议来说  如下图 会区分成是rtsp交互的sdp数据 还是媒体rtp数据 如下图

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 rtsp协议的各种方法 媒体描述信息都是在onWholeRtspPacket那个函数里面处理的

这里我们只关心媒体数据 代码中已经给出注释 rtcp先不管 所以我们会走到handleOneRtp这个函数里

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

PushRtpData也是我改名字了的函数 最后 会走到 sortPacket这里  ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

这个cb设置的有两个地方

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

实现体就是 推流的走到这个onWrite函数

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 至此 终于走到我们打断点的地方了

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 这里根据不同的媒体类型 会调用不同的inputRtp函数 我们这里是 H264

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

这里的decodeRtp函数中会将Rtp包重新组装成H264 packet包

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 分别是上面标黄的三个函数

在mergeFu 和 singleFrame函数中  会调用outputFrame函数如下图

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 outputFrame函数又调用了基类的inputFrame函数 之后通过obtainFrame函数开辟一个新的FrameZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

_delegates的定义如下

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 这个map是在addDeletegate中添加的ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

再看下谁调用了这个addDelegate函数即可 是在rtspdemuxer类中

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

刚刚那里的inputFrame自然就是调用了如下的代码

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 然后走到RtspMediaSourceMuxer 的inputFrame函数中

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 这里终于走到encoder了 之前一直是decoder  demuxer

这里是 muxer encoder

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 

 不管是那个packRtp都会走到 RtpCodec::inputRtp 

将rtp数据写进环形队列

 ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 

 最终会走到  大概应该是将这个数据填充到ringbuffer里面ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

   ZLMediaKit流媒体服务器 RTSP推流时候的堆栈

 暂时先分析到这文章来源地址https://www.toymoban.com/news/detail-419690.html

到了这里,关于ZLMediaKit流媒体服务器 RTSP推流时候的堆栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零搭建自己的公网RTSP、RTMP、FLV、HLS、WS-FLV、WS-RTSP流媒体服务器解决方案

    环境准备 操作系统: 内存:2G以上 CPU: 双核2.0GHz以上 下载并安装SkeyeVSS综合安防视频云流媒体服务 下载SkeyeVSS 下载地址:http://www.openskeye.cn/download/vss.html?id=c24a0a06-6d38-45a5-8623-a1fa3f406ab1 安装SkeyeVSS Windows系统安装 双击下载的windows平台SkeyeVSS_Server_Setup_Vx.x.xx_buildxxxxxxxx.exe安装包

    2023年04月17日
    浏览(83)
  • 使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

    名词解释   RTSP (Real-Time Streaming Protocol) 是一种网络协议,用于控制实时流媒体的传输。它是一种应用层协议,通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求,如播放、暂停、停止、前进、后退等,以控制媒体流的播放和

    2024年02月16日
    浏览(56)
  • Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流

    Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流: Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流_霸道流氓气质的博客-CSDN博客 上面讲了Nginx-http-flv-module+flv.js进行流媒体服务器搭建和前端播放视频流的过

    2024年02月01日
    浏览(59)
  • 流媒体服务器(17)—— 流媒体开源服务 MediaSoup 初识

    目录 前言 正文 一、简单介绍 二、关键特色 1. 超强 SFU 功能 2. Node.js 模块 3. 客户端 SDK 三、架构组成 1. 关键实例 2. 重要模块 四、发展现状 https://liuzhen.blog.csdn.net/article/details/115603863 https://liuzhen.blog.csdn.net/article/details/115603863 最近收看了一期微软(中国)关于云原生、大数据

    2023年04月09日
    浏览(50)
  • linux+nginx-http-flv-module+ffmpeg实现搭建简易流媒体服务器将rtsp流转flv格式在web端和微信小程序实时播放监控视频

    一.介绍背景 公司项目开发需求:将海康摄像头的rtsp流在web端及微信小程序端进行播放。之前我写过一篇关于web端使用webtrc+videojs播放rtsp流的文章,确实能够解决web端播放rtsp流的需求,但是这次多加了一个微信小程序....所以要考虑小程序的播放问题。本着探索实践的精神在

    2024年02月08日
    浏览(73)
  • Windows上搭建Nginx-http-flv实现rtsp视频流推流到rtmp流媒体服务器并转换和前端拉取http-flv视频流

    Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流: Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流_霸道流氓气质的博客-CSDN博客 Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流: Vue中使用vue-vi

    2024年02月15日
    浏览(73)
  • 搭建SRS流媒体服务器

    一、获取 SRS git clone https://github.com/ossrs/srs cd srs/trunk 二、编译SRS ./configure make 三、编写SRS配置文件(我的这个文件是原始的,未修改) vim conf/srs.conf 四、启动SRS ./objs/srs -c conf/srs.conf 五、启动ip摄像头进行推流 手机下载一个ip摄像头软件,然后设置中修改RTMP推流地址 rtmp://你的阿里

    2024年02月16日
    浏览(48)
  • 学着搭建流媒体服务器

    操作系统:NAME=\\\"openEuler\\\",架构:aarch64,CPU 运行模式:64-bit 目前有多个开发源代码可以搭建流媒体服务,但要先依赖gcc和cmake,所以首先安装gcc和cmake,查了一通资料,cmake安装记录如下: 1、依赖环境安装 yum -y install libyaml libyaml-devel python-setuptools libcurl-devel python-devel gmp gmp

    2024年02月11日
    浏览(52)
  • 流媒体服务器与视频服务器有什么区别?

    流媒体服务器与视频服务器有什么区别? 流媒体服务器用在远程教育,视频点播、网络电台、网络视频等方面。 直播过程中就需要使用流媒体服务器,一个完整的直播过程,包括采集、处理、编码、封包、推流、传输、转码、分发、解码、播放等过程,流媒体服务器主要负

    2024年02月11日
    浏览(43)
  • 搭建家庭影音媒体中心 --公网远程连接Jellyfin流媒体服务器

    转载自远程穿透的文章:【智能家居】Home Assistant入门安装并内网穿透实现远程安全控制 Home Assistant(以下简称HA)是个开源的智能家居平台,也叫家庭助手,就像一个软件,比如我们的QQ软件,微信软件。 Home Assistant把家中的智能家居设备整合到HA中,它能够接入的设备非常的

    2024年02月01日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包