热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rtsp和rtmp应用场景的区别,rtsp协议和rtmp协议远程传输

行业现状中国互联网化的进程已经越来越快了,各个行业都在进行着互联网化的改造,流媒体、音视频,作为跑在互联网上最大量级的数据类型,其从编码方式到传输协议到终端兼容都成为各家标准抢占的

行业现状

中国互联网化的进程已经越来越快了,各个行业都在进行着互联网化的改造,流媒体、音视频,作为跑在互联网上最大量级的数据类型,其从编码方式到传输协议到终端兼容都成为各家标准抢占的高点,RTMP、HLS(m3u8)、WEBRTC、AV1等等,互联网带来的使用习惯已经冲击了非常非常多的传统行业,就包括非常稳重的电力行业、高速交通行业,都逐步在往互联网、物联网架构进行靠拢,视频技术在这些行业也逐步开始发生变化,视频数据作为大数据可视化的重要部分,一定是要出现在可视化系统中的。

在传统流媒体视频监控行业、以视频为核心的物联网行业、以视频为特色的各行各业,都在一方面想进行老设备的互联网化改造,另一方面想在新设备的接入时都能够以传统安防的成本和互联网的架构方式来构建新的视频、流媒体、安防系统;

其实以上两种诉求是不矛盾的,大概自2010年前后,几乎所有的安防摄像机都已经开始支持RTSP协议了,即使是网络摄像机IPCamera、网络硬盘录像机NVR之前的模拟摄像机、硬盘录像机DVR,也都逐步可以通过“IPC接入NVR”、“DVR固件升级”的方式,将非标的设备都转换成为支持标准RTSP/RTP协议的网络设备。以海康摄像机为例,海康的数字、模拟、IPC、DVR、NVR都可以向上进行兼容接入,也就是再老的设备,都可以通过向下兼容的方式,由最新的设备将老设备进行接入并标准化、数字化的输出;

我们大致分析一下安防设备互联网化的流程 设备RTSP地址的获取;RTSP协议拉流;RTSP转RTMP数据的处理;RTMP推流;流媒体转码与协议同步输出;全终端的视频播放;灵活的配置与调度; 设备RTSP地址的获取

在每一款设备的RTSP协议输出方式上,区别就各种各样了,有的是一个系列产品会有一个地址格式,有的是没有格式,直接IP+Port对了就可以,有的只支持UDP协议(例如很多移动终端设备或者mifi设备),最靠谱的还属于大厂(海康、大华)了,格式基本确定,而且流输出比较稳定;

下面我就对怎么获取到一款设备的RTSP地址说一下自己的经验:

判断摄像机IP Camera、网络硬盘录像机NVR是否支持RTSP协议,有一个非常基础的参考,就是在设备的后台配置中,查找是否有关于RTSP端口的配置,如果设备有RTSP端口的配置,那基本上该设备是支持RTSP协议的

对于较为近期生产的大部分的视频设备:网络摄像机、网络硬盘录像机NVR基本都支持Onvif协议,RTSP地址通过Onvif发现就可以了,Onvif的发现工具大家可以到 www.easynvr.com 下载Onvif工具,通过Onvif探测就能够获取到RTSP地址;

对于没有Onvif辅助的设备,判断了设备支持RTSP协议后,就是找具体RTSP地址规则了,那么对于市面上的大部分摄像机那都基本上是海康大华的天下了,尤其是海康。这里就对我所接触的各家设备的RTSP地址做一个汇总:

海康DS系列设备:《最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明

海康其他老设备:《海康、大华IpCamera RTSP地址和格式》
大华设备:《海康、大华IpCamera RTSP地址和格式》
宇视设备:《宇视摄像机RTSP地址格式规则》
杂牌设备:杂牌设备的建议是,直接采用 rtsp://ip:port/试着播放一下,然后再就是去具体厂家问了,很多小厂不把RTSP做为主要输出内容,所以这一块做的也比较乱,效果一般;

市面上还是会有一些不输出RTSP协议的视频设备,比如很多特别贵的热成像设备(输出的分辨率还特别低),这些设备一般情况下只能通过SDK接入,那么我们也可以通过EasyIPCamera (https://github.com/EasyDarwin/EasyIPCamera)或者 EasyRTSPServer(https://github.com/tsingsee/EasyRTSPServer) 将这些非标设备进行RTSP标准化改造,先通过设备SDK取流到Server端,再通过EasyIPCamera或者EasyRTSPServer进行输出; RTSP协议拉流

目前市面上两套相对较好的RTSP协议拉流技术框架,一个是live555,一个是ffmpeg,两套框架各有千秋,各有一系列的成功的案例:

live555:非常老牌的RTSP框架,十几年了,还在迭代与维护,作者Ross也以此为业,进行着开源+商业的运营,大家所熟知的VLC播放器,RTSP拉流采用的就是live555;

所以说,开源+商业化才是持久之道!

ffmpeg:ffmpeg就更不用说了,目前国内大部分的播放器,都用这个,RTSP模块自写自带的,兼容性也非常不错,不过要定制起来,流程就比较复杂;

我们在这一块分别参考live555和ffmpeg打造了两款RTSPClient工具:EasyRTSPClient和EasyStreamClient,这都是对几十万行级别代码的优化输出,站在巨人的肩膀上!

源自EasyRTSPClient Github介绍:An elegant, simple, high performance & high compatibility RTSP Client Utility,can use in RTSP Player,NVR,RTSP Relay,EasyRTSPClient can run in any platform ,such as x68/x64/Windows/Linux/Android/iOS/arm etc…,with flexible interface,EasyRTSPClient can fit almost all network IPCamera,very easy to use.简单、稳定、高效、易用的RTSPClient工具,支持Windows、Linux、ARM、Android、iOS等几乎所有平台,支持RTP Over TCP/UDP,支持断线重连,能够接入市面上99%以上的IPC,调用简单且成熟稳定!Github地址:https://github.com/tsingsee/EasyRTSPClient

EasyStreamClient:是一套RTSP、RTMP、HTTP等网络协议的拉流库,基本上只要是ffmpeg支持的,EasyStreamClient都支持,而且EasyStreamClient简化了调用的流程,强化了输出的结果,最重要的是支持了重连功能,非常易用!Github地址:https://github.com/tsingsee/EasyStreamClient

不能小视这两个功能组件的重要作用,在很多应用和项目中,大量的时间都是耗在这两个上面,每一家的设备都不一样,对协议标准的理解各有出入、各有一定的bug,作为直接面向一线设备的工具,大部分的兼容工作都在这两个组件上。

RTMP推流

跟RTSPClient拉流一样,RTMP推流同样有两个非常值得参考的开源项目:librtmp和ffmpeg,相比较来说,这里的ffmpeg推流在兼容性和持续输出上,会有一定局限,而且定制起来也会流程相对比较繁琐,我们目前主要的RTMP推流采用的是EasyRTMP。

EasyRTMP是一套调用简单、功能完善、运行高效稳定的RTMP功能组件,经过多年实战和线上运行打造,支持RTMP推送断线重连、环形缓冲、智能丢帧、网络事件回调,支持Windows、Linux、arm(hisiv100/hisiv200/hisiv300/hisiv400/etc…)、Android、iOS平台,支持市面上绝大部分的RTMP流媒体服务器,包括Wowza、Red5、ngnix_rtmp、crtmpserver等主流RTMP服务器,能够完美应用于各种行业的直播需求,手机直播、桌面直播、摄像机直播、课堂直播等等方面! Github地址:https://github.com/EasyDSS/EasyRTMP

我们几乎全线的产品都采用的是EasyRTMP进行的流媒体音视频标准化,EasyRTMP能够将输入的H.264、H.265、AAC进行非常低延时以及平滑的流转,这个是目前我们在视频标准化推流输出上唯一的选择!

RTSP转RTMP数据的处理

在数据的流转上,我们做了很多的工作,实际上这些工作用一个简单的ffmpeg.exe是可以完成的,但是最终都返工了,用了EasyRTSPLive、EasyRTMPLive、EasyNVR这样的中间件型服务或者流媒体网关服务。为什么呢?

用ffmpeg只能做到一个基本的DEMO演示的作用,在容错机制以及应对不同网络情况时,会有诸多的问题,例如,ffmpeg不能重连,只能靠手动控制其重新连接,或者采用程序反复调用连接,另一方面,存在兼容的问题,而且资源消耗非常大,在某些ffmpeg拉流转推流的场景下,ffmpeg对资源的消耗非常大;
还有一个是ffmpeg拉转推延时不可控,对于用户来说,属于一个黑盒状态,出了问题啥情况都不知道;

为了解决以上描述的这些问题,我们分别开发了EasyRTSPLive、EasyRTMPLive ,区别在于EasyRTSPLive只针对于RTSP协议的RTMP转推,而EasyRTMPLive是对于各种各样的流媒体协议的输入,例如RTSP、RTMP、HTTP、HLS等等等等的协议格式,都可以采用EasyRTMPLive输入,并做RTMP标准化输出,而且EasyRTMPLive所使用的EasyStreamClient还自带了软转码的功能,能将各种非标的音视频格式都能转化成为标准的格式进行输出;

EasyRTSPLive需要将安防输入的各种音频格式,例如PCMA(G.711A)、PCMU(G.711U)、G.726,进行转码成为互联网需要的AAC音频格式,AAC音频编码可选择用EasyDarwin开源的EasyAACEncoder,基于faac内核,效果非常好,而且现在很多支持浮点计算的芯片都能支持;

EasyNVR 是另一款基于EasyStreamClient和EasyRTMP的产品化程度更高的产品,这里只做一个大概的描述,就不深入讨论了:EasyNVR是一款拥有完整、自主、可控知识产权,同时又能够具备软硬一体功能的安防互联网化流媒体服务器,能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP、Onvif协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发。

对于技术实现的选择:

EasyRTSPLive:能方便有一定视频能力的开发者或者公司进行集成开发,而且对程序包体大小有要求,尽量要求精简、专注于RTSP等等特点;

EasyRTMPLive:如果想做一款全功能、全协议的视频编码器,那可以采用EasyRTMPLive,支持协议全、兼容扩展方便、站在ffmpeg巨人的肩膀上;

如果想低成本、快速、稳定、可靠、有效达到目标建议用EasyNVR;

流媒体转码与协议同步输出

一般情况下,在一些互联网直播的场景中,我们经常只需要通过EasyRTMP将RTMP流推送到CDN或者第三方公有云即可达到视频直播的目标,但是在很多政府型项目或者私有场景项目,需要自建流媒体服务器,我们基本上采用的就是EasyDSS高性能流媒体服务器,EasyDSS内核也基本上是整套Easy系列的流媒体服务技术中台,对内、对外都用的是一个产品,极大地方便了各个开发者、部门、公司对流媒体技术的获取。

EasyDSS商用流媒体服务器是一款支持视频点播、转码、RTMP推流直播、RTMP/HLS直播分发、服务端录像、录像检索、录像下载、时移回放的商用流媒体服务器,采用业界优秀的流媒体框架模式设计,服务运行高效、稳定、可靠、易维护,支持RTMP直播、RTMP推送、HTTP点播、HLS直播,并支持关键帧缓冲,画面秒开等多种特性,能够接入WEB、Android、iOS、微信等全平台客户端,是移动互联网时代贴近企业点播/直播需求的一款接地气的流媒体服务器,配套OBS、EasyRTMP等直播推流工具以及EasyPlayer等网络播放器,可以形成一套完整的视频直播、录播解决方案,满足用户在各种行业场景的流媒体业务需求。

功能特点 接收RTMP推流:EasyDSS能够接收RTMP推流客户端推送的RTMP音视频流(H264+AAC),并转发给播放客户端;分发RTMP流:EasyDSS提供RTMP流的高性能分发,RTMP播放客户端可直接连接EasyDSS进行播放;分发HLS流:EasyDSS提供同步输出HLS流的功能,可以将推送的RTMP流进行实时HLS切片,并提供HLS流的高性能分发;直播录像:支持将推送的直播流进行同步录像保存;直播录像检索:支持检索系统的直播录像,提供录像检索和列表接口;直播录像回放点播:可以点播录制的服务端录像,提供HLS点播,自由seek与倍数播放功能;录像下载:可以对检索到的录像段进行下载,另存为MP4文件;HTTP服务器:EasyDSS同时也是一款高性能的HTTP服务器,用于提供HTTP访问,同时用于HLS流分发(具备nginx所有属性功能);防盗链:持HTTP防盗链技术;主动拉取RTMP流进行转发:EasyDSS支持对RTMP流的主动拉取,并将此RTMP流进行RTMP/HLS的转发;转发RTMP流推送:支持将推送客户端推送的RTMP流,转发推送到其他RTMP流媒体服务器;推流鉴权验证:支持对推送客户端的推送流进行推流验证,若无权限的推流地址,则不接收客户端推流;推流信息统计:可以对推送流进行信息统计,包括推送时长、观看人数、起始时间、持续时长、视频码率、音频码率、推送流量等信息;播放鉴权:支持播放客户端播放验证,无权限的播放地址将无法进行播放;播放信息统计:可以对播放客户端的数量进行统计,并且可以统计客户端的开始时间、播放时长、播放流量等信息;视频文件点播:支持点播HLS/mp4文件;跨平台:支持多种平台部署运行,Windows、Linux;二次开发:提供HTTP二次开发接口,可使用接口进行一定的二次开发; 全终端的视频播放

从以上的流程来看,我们采用的是RTMP推流输出的方式,但是如果说输出只是支持RTMP,已经是不能够满足需求的,或者说是逐步会被淘汰的,RTMP协议慢慢已经不适合做播放协议了,更多情况下只适合做推流协议,主要几个方面:

各大浏览器已经明确要淘汰flash了;国内的flash播放已经逐步被商业化,很多时候播放还要运行广告插件才行;

目前RTMP推流到EasyDSS或者CDN、公有云流媒体服务器,基本都会同步输出RTMP、HLS(m3u8)协议,保障全平台、全终端的可播放;EasyDSS稍微优势一些,支持RTSP(兼容视频分析用途)、RTMP、HLS(m3u8)、HTTP-FLV(Web低延时);

前端播放用EasyPlayer.js能够达到全平台全终端兼容播放而且是免费的;

灵活的配置与调度

综上描述了很多,从设备到转发,再到流媒体和播放,其实一整套下来东西非常多,想要做的稳定一点,都需要花费很长很长的时间;

更多流媒体音视频资源

EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS高性能互联网直播服务:www.EasyDSS.com

EasyNVR安防视频可视化服务:www.EasyNVR.com

EasyNVS视频综合管理平台:www.EasyNVS.com

EasyNTS云组网:www.EasyNTS.com

EasyGBS国标GB/T28181服务器:www.EasyGBS.com

EasyRTC视频会议解决方案:www.EasyRTC.cn

Copyright © TSINGSEE.com Team 2012-2019


推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
楼兰祈珞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有