通过ZLMediaKit来说说流媒体服务的实现

2024-01-07 13:44

本文主要是介绍通过ZLMediaKit来说说流媒体服务的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 实现流媒体服务的三大基础
      • 事件循环
      • 并发模型
      • 错误处理
    • 流媒体服务的分类

实现流媒体服务的三大基础

  1. 事件循环。
  2. 并发模型。
  3. 错误处理。

这是也是实现各种C++服务的基础,业务通过这三大基础进行构建。

事件循环

EventLoop,它通过事件驱动程序的流程,所处理的是IO和定时器事件。

它的实现都是基于IO复用机制,比如Linux的epoll。现在有很多开源事件库实现,比如libevet,libuv,asio等,不同的实现,主要是在性能,功能,和跨平台上做文章来突出差异化。

通过reactor模式实现EventLoop并不复杂(不追求跨平台和性能的情况下)。在流媒体服务领域,咱们手搓一个基于linux epoll的事件循环就足够满足IO需求,毕竟流媒体服务主要指标并不在IO上。

ZLMediaKit中的EventLoop就实现的比较好,封装性好,代码简明,作为流媒体服务的IO性能已够用。

并发模型

并发模型,是指服务是多线程还是多进程。会出现多进程多线程,单进程多线程,单进程单线程,多进程单线程的各种模式。

现在服务器的实现大多采用了多线程模式,即多进程多线程或单进程多线程,ZLMediaKit是单进程多线程服务,虽然它有两个进程,但是其中一个是守护进程,并不处理业务。

对rtc流媒体服务,一般都是采用单线程多进程模式,主要是规避对锁的使用及线程切换的开销,来保证足够实时性。

多线程的模型中线程通常是于EventLoop结构在一起的,即Event Loop per thread。可以看看这篇文章介绍的ZLMediaKit的线程。

错误处理

C++有两种错误处理方式:

  1. 从C 语言继承而来的错误码方式。
  2. 异常方式(C++异常有天生的缺点)。

C++中比没有统一的方式,所以错误处理的方式,是处于各取所爱的状态。在ZLMediaKit中,使用的异常的方式。但是不管用哪种方式,都要达到以下要求:

  • 能清楚的分辨,记录错误
  • 要保证有一定的错误兼容性(比如,不因为消息兼容性的问题而崩溃 )

流媒体服务的分类

  • rtc流媒体服务

rtc流媒体服务运用在rtc系统中,比如腾讯会议,声网。rtc中的流媒体服务主要目标是保证高效的转发,在基于udp/rtp协议的系统中,直接转发rtp包,不会转协议,不涉及到组帧,拆包,音视频同步。

  • 通用流媒体服务

ZLMediaKit,live555这类服务称为通用流媒体服务,支持多种协议。所以有转协议,组帧,拆包,还会做音视频同步。

rtc服务相比通用流媒体服务,转发效率高。通用流媒体服务则媒体业务丰富。这两种服务上实现的区别

  1. EventLoop(网络IO)
  • rtc服务,网络IO比较简单,只需支持UDP,甚至可以不同IO复用机制。
  • 通用流媒体服务,因为要支持多种协议,所以TCP,UDP都需支持,所以一般都有完善的EventLoop,事件驱动机制。
  1. 并发模型
  • rtc服务,前面提到过,为了保证转发效率,rtc服务会使用单线程,通过多进程的方式利用多核。
  • 通用流媒体服务,并发模型多样。

这篇关于通过ZLMediaKit来说说流媒体服务的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580107

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。