浅析即时通讯开发之RTMP数据传输协议的实时流媒体

news2024/11/20 13:28:31

近年来,随着网络带宽的提升,以及多媒体压缩编码技术的发展,流媒体技术得到了非常广泛的应用。全球的流媒体市场正在以极高的速度向前发展,并逐步取代了以文本和图片为主的传统互联网。根据Cisco的VisualNetworkingIndex(VNI)统计,2005年流媒体流量仅占全球互联网总流量的5%,而到了2011年这一比例已经提升到40%,预计到2015年这一比例将会进一步提升到62%。与此同时,流媒体技术也已经突破了电脑的限制,进入了平板电脑和智能手机等领域,一个Video Every Where的时代即将到来。

 

在这种流媒体快速发展的大环境下,各个地方的电视台,视频服务提供商纷纷开始了自己的流媒体业务。在搭建业务平台的时候,如何选取合适自己的流媒体平台成为一个至关重要的问题。中国网络电视台,中国教育电视台,河南电视台,深圳电视台等多家电视台,以及六间房,奇异网,威视网等流媒体服务商都选择了Adobe公司的基于Flash平台的流媒体系统。该系统传输数据使用的RTMP协议[2]因此得到了非常广泛的应用。本文将会对其特点进行详细的分析,并搭建一个基于RTMP协议的流媒体直播系统。

当前互联网中的流媒体服务从传输方式上大体上可以分为两种方式:顺序流式传输和实时流式传输。

顺序流式传输采用普通的HTTP服务器作为存储多媒体文件的服务器。当客户端发起连接想要观看多媒体资源的时候,直接通过HTTP协议把文件下载到客户端本地系统的临时文件夹中,再使用播放器播放已经下载好的文件。它的与服务器交互的流程如下图所示。

顺序流式传输的实质就是播放本地文件。顺序流式传输目前得到了十分广泛的应用:YouTube、优酷网、土豆网等视频服务商都采用了该种方式提供多媒体服务。顺序流式传输的好处主要是减轻了服务器的压力,即当多媒体文件下载完成后就可以断开连接,从而节省出服务器资源再为其他客户端服务。此外,顺序流式传输使用的是普通的HTTP服务器,视频服务商不必花费额外的资金购买流媒体服务器,从而节省了一笔经费。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

 

实时流式传输采用专门的流媒体服务器存储多媒体文件。当客户端发起连接想要观看多媒体资源的时候,一般通过专有的实时流式传输协议把位于流媒体服务器上的多媒体数据直接传输给客户端的播放器,再实时播放。他与服务器交互的流程如下图所示。

实时流式传输的应用目前还处于发展阶段,主要应用于网络直播和正版影视的点播。使用实时流式传输方式观看多媒体资源的时候,由于不会把文件下载到本地,可以防止视音频提供商的内容被非法拷贝,从而保护了视音频内容的版权。此外,使用实时流式传输方式观看多媒体资源的时候,可以随意跳转到该视音频的任何位置,而不必像顺序流式传输那样只能观看已经下载过的部分,因此大大增加了观看时的自由度。
 

RTSP 是由 IETF( Internet 工程任务组) 提出 的[3]。RTSP 协议全称是 Real Time Streaming Proto- col,即实时流传输协议,是 IETF 的 RFC 标准。

RTSP 用于控制流媒体的传输,比如建立连接,播放, 暂停等等,但本身并不传输多媒体数据。多媒体数据通常都是使用 RTP/RTCP 协议进行传输。RTP/ RTCP 协议全称是 Real - time Transport Protocol / Real - time Transport Control Protocol,即实时传送协议 / 实时传送控制协议,也是 IETF 的 RFC 标准,专门用于传输多媒体数据。

虽然 RTSP + RTP 是一个国际标准的组合,但是在互联网世界中却没能做到“一统天下”。这与互联网的环境有很大关系。

RTP/ RTCP 作为传输多媒体数据的网络协议,一般情况下使用 UDP 协议作为其传输层的网络协议[3]。 UDP 是无连接的,不提供可靠交付,因此在互联网上( 尤其是广域网) 传输数据的时候极易产生丢包, 时延,抖动等问题。多媒体数据对丢包,时延,抖动 有很高的要求,一点点小问题就会极大的影响用户的体验质量(QoE)[4]。因此互联网上采用RTSP + RTP 方式传输的流媒体并不是很多。

不过,也有例外,现在主流的即时通讯(即IM聊天应用)中的实时音视频聊天中,多使用这种组件,原因在于实时音视频聊天不同于影片播放这种场景,实时性比完整性更重要,播放影片网络不好的时候可以加载一会,用户可以等,但实时音视频聊天时这就是大忌,好在实时音视频聊天时网络很烂的情况下,图像帧丢失的情况并不会有实质性地影响,因而为了效率和实时体验,RTP/RTCP的UDP方式相反却是最佳的。

与在因特网上传输的流媒体不同,IPTV 通常都采用 RTSP + RTP 的方式传输多媒体数据[5]。因为 IPTV 通常采用专网传输,网络状况较好,极少出现丢包,时延,抖动等问题,而 UDP 简单的协议规则可以大幅提高传输效率,所以可以“放心大胆”的使用 RTSP + RTP 的方式传输。

MMS 是由微软公司提出的。MMS 协议全称是 Microsoft Media Server protocol,即微软媒体服务协议,用于访问 Windows Media 发布点上的内容。

HLS 是由苹果公司提出的。HLS 全称是 HTTP Live Streaming,即基于 HTTP 的实时流式传输协议, 可实现流媒体的直播和点播,主要应用在 iOS 系统, 为 iOS 设备( 如 iPhone、iPad) 提供音视频直播和点播方案。

RTMP 是由 Adobe 公司提出的。RTMP 协议全称是 Real Time Messaging Protocol,即实时消息传送协议,用于在 Flash 平台之间传递视音频以及数据。 与 RTSP + RTP 组合提供流媒体服务的方式不同, RTMP 协议本身既可以传输多媒体数据也可以控制多媒体播放。

RTMP 协议使用 TCP 协议作为其传输层的网络协议。TCP 是面向连接的[3],提供可靠交付的协议,因此在互联网上传输时不会出现丢包情况,从而保证了用户体验( QoE) 。但是 TCP 协议提供可靠交付的代价就是增加了一些额外的开销,占用了一些带宽和处理机资源。随着网络带宽的提高和计算机硬件的发展,这些开销会显得越来越微不足道。因此 RTMP 协议在未来有很好的发展前景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【玩转c++】c++模板和泛型编程

本期主题:c模板和泛型编程博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐身为程序员,不会有人没女朋友吧!! 目录 🍁1.泛型编程 &#x…

ChatGPT 是何方神圣?为什么这么猛?

哈喽,大家好,我是木易巷! 本篇文章给大家介绍一下这个很猛的玩意:ChatGPT !!! 什么是ChatGPT ? 在12月初,人工智能实验室OpenAI发布了一款名为ChatGPT的自然语言生成式…

【Pytorch】第 5 章 :解决多臂老虎机问题

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

web期末网站设计大作业 HTML+CSS+JS仿爱奇艺官网影视网站

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

《Linux运维实战:使用Percona Backup for MongoDB物理备份与恢复Mongodb数据》

一、备份与恢复方案 Percona Server for MongoDB Percona Server for MongoDB是一个免费的、增强的、完全兼容的、源代码可用的、带有企业级功能的MongoDB Community Edition的替代品。它不需要对MongoDB应用程序或代码进行更改。 参考官方:Percona Backup for Mon…

我的博客系统[Servlet]

目录 后端程序 1. 需求分析 2. 概要设计 3. 编写数据库操作的代码 3.1.使用maven,引入依赖 3.2 封装 数据库的 DataSource 3.2.1 使用单例模式,把数据库的 DataSource 和 建立连接 还有 断开连接也给封装进去 3.2.2 创建实体类 3.2.3 针对这两个实体类涉及到的 增删改…

近期Java杂项问题

Data不会为static变量提供get/set。 Data不会为final变量提供set。 ConfigurationProperties加载static静态属性为null的问题 解决:ConfigurationProperties默认是调用非static Setter方法,把静态的Setter方法的static去掉就可以了 Value注入静态属性 解…

RK3568平台开发系列讲解(系统优化篇)排查卡顿的工具介绍

🚀返回专栏总目录 文章目录 一、Traceview二、Nanoscope三、systrace四、Simpleperf沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Android底层基于 Linux 内核,像 systrace、Simpleperf 也是利用 Linux 提供的机制实现,因此学习一些 Linux 的基础知识,对于理解这…

D-Wave最新调研!量子计算商业活动和投资不断增长

(图片来源:网络) 加拿大量子计算公司委托高性能计算分析机构Hyperion Research进行了一项研究,以更好地了解量子计算 (QC) 的商业早期采用者所面临的挑战和机遇。这项研究调查了全球范围内的300家目前接触量子计算的企业&#xff…

计算机组成大题分析(六)

假定计算机的主频为 500MHz ,CPI 为4。现有设备A 和 B,其数据传输率分别为2MB/s 和 40MB/s ,对应 I/O 接口中各有一个 32 位数据缓冲寄存器。请回答下列问题,要求给出计算过程。 (1) 若设备 A 采用定时查询 I/O 方式,每…

为什么说函数组件要比类组件好呢,函数组件和类组件的区别你都清楚吗

一、类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数,可通过this.props的方式去访问 在组件中必须实现render方法,在return中返回…

详解c++---类和对象(四)

这里写目录标题const成员再谈构造函数为什么会有初始化列表第一个问题第二个问题第三个问题初始化列表的使用方式即注意事项explicit关键字static成员static修饰类中的变量一些性质static修饰成员函数友元友元函数友元类内部类匿名对象拷贝对象时的一些编译器优化const成员 在…

【知识图谱】(task2)知识图谱表示

note 知识图谱的符号表示方法: 属性图是工业界最常见的图谱建模方法,属性图数据库充分利用图结构特点做了性能优化,实用度高,但不支持符号推理。RDF是W3C推动的语义数据交换标准与规范,有更严格的语义逻辑基础&#x…

dev_III笔记补充

1.在客户端显示form 思路: 想要在客户端显示form必须先把form放在 menu item中,然后通过url地址的方式打开form 步骤: 1.建立form 2.建立Menu Item (特别注意:是display类型, 不是action类型 不是action类型…

【分布式技术专题】「架构设计方案」盘点和总结秒杀服务的功能设计及注意事项技术体系

秒杀应该考虑哪些问题 超卖问题 分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲…

python爱心源代码集锦

python爱心源代码集锦 本文目录: 一、代码效果预览索引图 二、爱心源代码集锦 (1)、爱心图形1(弧线型)(显示的文字写在代码里) (2)、爱心图形2(直线型&am…

MySQL 如何优化慢查询?

一、前言 在日常开发中,我们往往会给表加各种索引,来提高 MySQL 的检索效率。 但我们有时会遇到明明给字段加了索引,并没有走索引的Case。 进而导致 MySQL 产生慢查询。 严重场景下,甚至出现主从延迟、数据库拖垮的极端事故。 本…

微服务框架 SpringCloud微服务架构 28 数据同步 28.4 发送mq 消息

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构28 数据同步28.4 发送mq 消息28.4.1 直接开干28 数据同步 28.4 发送mq 消…

《Linux运维实战:使用Percona Backup for MongoDB逻辑备份与恢复Mongodb数据》

一、备份与恢复方案 Percona Backup for MongoDB 是一个开源、分布式和低影响的解决方案,用于MongoDB分片集群和副本集的一致备份。从版本1.7.0开始,Percona Backup for MongoDB支持物理和逻辑备份和恢复,仅支持对逻辑备份进行时间点恢复。 …

UIAutomator测试框架介绍

uiautomator简介 UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点…