RTSP数据流无插件浏览器播放实现

    最近接的音视频处理的项目比较多,停下来整理一下思路,分享一下我踩过的坑,希望能够帮到别人。

    我们平时接触到的视频流一般有以下几种:

    1.RTSP(Real Time Streaming Protocol)协议,RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。现在的主流摄像头(海康,大华)很多输出的都是RTSP数据流。

    2.RTMP视频流(Real Time Messaging Protocol),Adobe公司开发的,RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的,在flash盛行的年代比较火,随着chrome对flash的屏蔽,哑火了,不过仍然是我们接下来处理的重要部分。

    3.HLS(HTTP Live Streaming)协议,苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。 相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

4,5,6等等等等,其他的暂时还没遇到,跟本文也没有直接关系,等遇到了再写

介绍两个视频处理的神器:

1.ffmpeg:音视频处理神器:解码,转码,推流于一体的全能神器

2.nginx-http-flv,注意,注意,是集成了http-flv-module的nginx

    下面说点干货,实现RTSP视频流无插件播放的处理过程:

    1.拿到RTSP地址。

        一般这个都是项目里面提供好的,测试地址网上公开的不多,好像就一只大兔子的视频,还是时不时访问不了。

        自行取用:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

        如果访问不了,我们可以通过下面介绍的ffmpeg来推流,

        ffmpeg -re -i d:\mgdz3.mp4 -vcodec h264 -acodec aac -strict -2 -f rtsp -rtsp_transport tcp  rtsp://localhost/test

        得到的本地rtsp地址为:rtsp://localhost/test

    2.程序接收处理RTSP数据流,转为RTMP

        这里有两种方式:

            一种可以直接拿ffmpeg来实现,或者直接拿ffmpeg推RTMP的流就可以了,这里简单带过:ffmpeg -re -i mgdz3.mp4 -vcodec copy -acodec copy -f flv rtmp://loalhost/live/01

             还有一种就是通过程序解码然后推流,详见另外一篇文章:

            java实现rtsp转rtmp

    3.视频服务器(下面提供的nginx-http-flv)对rtmp数据流进行转码,提供http-flv地址

    4.利用哔哩哔哩的开源flv.js实现前端播放,项目地址公开出来:

       flvjs实现rtsp数据流无插件浏览器播放-前端

        flvjs实现rtsp数据流无插件浏览器播放-后端
 

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

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

相关文章

把类成员改成指针_如果类中存在管理其他类对象的指针,通过析构函数释放它们...

C.33: If a class has an owning pointer member, define a destructorC.33:如果类包含拥有所有权的指针成员,定义析构函数Reason(原因)An owned object must be deleted upon destruction of the object that owns it.从属对象必须通过拥有该对象的所有者类的析构函…

MySQL 服务无法启动--服务没有报告任何错误 ---Failed to find valid data directory.

系统重装后重新安装mysql环境,各种踩坑。服务无法启动 mysqld --console 查看详细错误:Failed to find valid data directory 发现mysql目录没有data文件夹,创建后问题依旧。 移除mysql, mysqld -remove mysql 重新初始化 mys…

docker内存阀值_kubernetes调度之资源耗尽处理配置

本篇将介绍如何使用kubelet处理资源耗尽的情况当可用的计算机资源非常低的时候,kubelet仍然要保证节点的稳定性.当处理不可压缩的计算机资源(比如内存或磁盘空间)时,这尤其重要,当这些资源被耗尽时,节点将变得不稳定驱离策略kubelet会积极的监视并阻止可用计算机资源耗尽.这种情…

hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...

集群简单维护查看日志上篇我们搭建了集群,并且完成了hdfs的搭建,但在我的linux02和linux03上,发现一个问题,我启动了datanode之后,开始进程还在,一会就自己消失了,这是为什么呢?(如下…

c++ 函数返回空_Python all() 函数

all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、None、False 外都算 True。语法all(iterable) # iterable -- 元组或列表。示例>>> all([a, b, c, d]) # 列表li…

python3.6和3.7的区别_python3.6和3.7有什么区别

Python 3.7 已经发布了,目前Python的用户,主要使用的版本 应该是 Python3.6 和 Python2.7 ,那么是不是该转到 Python 3.7 呢?首先大家要知道Python 3.7 是对 Python 3.6 的升级。Python官方对 3.7 的新特性:(推荐学习&…

vue 日期格式化返回指定个数月份_12、vue中日期格式化转换的函数

/*** format time depend on the offer timestamp or Date instance* param {Number, Date } date 要转换的日期* param {String} format 字符串日期格式 default DD/MM/YYYY HH:mm* param {Boolean} instance describe 配置项, 如果为true 返回转换后的日期对象实例 …

beego 例子_beego框架代码分析

前言也许beego框架在国内应该是众多PHPer转go的首选,因为beego的MVC、ORM、完善的中文文档让PHPer们得心应手,毫无疑问我也是。这种感觉就像当年入门PHP时使用ThinkPHP一样。也许随着你的认知的提升,你会讨厌现在东西,比如某一天你…

kali2020识别不到网卡_WIN10环境下台式机找不到RealTek HD管理器解决耳塞式耳机外放问题...

最近想在工作休息闲暇时开个音乐播放器或者小游戏放松一下,需要戴上耳塞式耳机,但是最近这个耳机在公司台式电脑突然识别不到了,如果是自己的笔记本电脑在控制面板 - 硬件和声音里是可以找到“RealTek高清晰音频管理器”选项的,然…

韵乐x5效果器ktv最佳参数_家庭ktv(卡拉ok)家庭影院ktv选购推荐攻略

因为陆陆续续的给小区的邻居有推荐安装家庭KTV设备,根据他们的使用反馈和选购前遇到的问题,我做了汇总并整理了这篇文章. (不写复杂的参数,不堆积商品推荐,只推荐几款不同价位,真正性能优质、价格美丽的家庭…

cat3 utp是不是网线_小科普 | 网线也有高低?聊聊网线的差别

好电脑、好主板、好网卡、好运营商、好套餐,是不是就意味着有了极好的网络体验呢?对,但也未必。因为还少算了最后一道关卡——网线。▌线材网线这个东西,看着还真都差不多,插上就能用这能有什么差别呢?首先…

redis续期_面试官:Redis分布式锁如何解决锁超时问题的?

一、前言关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题), 但代码执行时间可能需要30s, 然后redis服务端10s后将锁删除, 此时, B线程恰好申请锁…

markdown如何设置图片大小_不会吧,还不会用markdown排版吗

请使用 Chrome 浏览器。请阅读下方文本熟悉工具使用方法,本文可直接拷贝到微信中预览。1 Markdown Nice 简介支持自定义样式的 Markdown 编辑器支持微信公众号、知乎和稀土掘金欢迎扫码回复「排版」加入用户群2 主题https://preview.mdnice.com/themes/欢迎提交主题…

此次边路调整系统推荐射手走哪路_王者荣耀地图重大对称改动,终于能射手对射手,上单对上单了...

兄弟萌,一直困扰大家的地图问题终于要改了,王者峡谷将在今年的周年庆版本,迎来一次玩法体验的大升级!调整介绍我们将尝试改造边路的地形&资源,促进更合理的同职业分路对线。以往通过职业、英雄的调整确实很难实质改…

二阶振荡环节的谐振频率_困惑了很久的串联/并联谐振电路详解

在含有电阻、电感和电容的交流电路中,电路两端电压与其电流一般是不同相的,若调节电路参数或电源频率使电流与电源电压同相,电路呈电阻性,称这时电路的工作状态为谐振。谐振现象是正弦交流电路的一种特定现象,它在电子…

安装不成功_iOS12.4.1 安装失败?教你百分百不掉签

说重点:近日,苹果频繁封杀证书,导致企业证书很缺,补上又封,想越狱又不能安装,实在困扰了很久,今天就分享百分百安装成功的方法,安装后配合自动续签插件,简直完美。接下来…

vsftpd设置被动模式_(1)vsftpd主、被动模式iptables配置方法

大多数的TCP服务是使用单个端口的连接,一般是用户向服务器的一个某个端口发起连接,然后使用这个连接进行通讯。但FTP协议却是例外,它使用双向的多个连接,而且使用的端口很难预计。FTP连接包括:一个控制连接 (controlco…

指定的参数已超出有效值的范围_整流二极管的特性和重要参数

一、 二极管的半导体原理略二、 二极管的特性曲线研究电路也有两种方法,一个是从它的内部工作原理去分析,另一个是从它表现出的外部特征去分析,把电路看成一个黑匣子,不管它内部什么结构什么原理,只研究它表现出来的特…

mysql boolean 和bool_关于 MySQL 的 boolean 和 tinyint(1)

boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE,FALSE,它们分别代表1,0,1,0,mysql> select true,false,TRUE,FALSE;--------------------------| TRUE | …

mysql存储过程触发器_【MySQL笔记】触发器,存储过程和函数

2)case语句mysql > DELIMITER //mysql >CREATEPROCEDUREproc3 (inparameterint)->begin->declarevarint;->setvarparameter1;->casevar->when0then->insertintotvalues(17);->when1then->insertintotvalues(18);->else->insertintotvalues…