基于EasyNVR的H5跨平台直播终端实现

一、前言


       在现在这个时代,做开发常会听说的一个词就是“跨平台”。自从移动端的用户需求越来越大,H5逐渐发展,跨平台似乎已经成为了软件开发不可或缺的技术。在为我们带来了巨大遍历的同时,也留给了我们众多的坑,今天,我就说说关于跨平台直播终端的实现。本人还只是大三学生狗一枚,技术方面肯定和网上大牛无法比较,若有错误或不成熟的思想,此次也是因为项目需求对H5实现直播功能有所涉猎,望网友们海涵,不喜勿喷。

       本文主要记录在项目开发过程具体流程,还有内网穿透等一些知识,提供了所需工具的下载地址以及运用方式,大多数比较深的知识点没做具体叙述,包括像跨平台的响应式布局这些东西也就就不过多介绍,大家可以针对需求自行学习相关知识。

二、requirements

          直播终端的实现笼统的来说一定是需要这三样东西的:摄像头、服务器、显示前端。大致流程图如下:

        大概就是这么个东西,说的高尚牛逼点,就是一个完整的视频直播平台可以分为三个部分:硬件设备层、视频能力平台层以及视频应用平台层。硬件设备层咱得自己准备,无非就架个IP Camera,而EasyNVR就为我们提供了视频能力层,也就是接收Camera传回的数据的平台以及一个服务器,视频应用平台层就是我们所说的前端,为了实现跨平台我们采用WEB前端开发,你可以修改EasyNVR自带的WEB源代码,也可以自己写界面,我选择的就是后者,因为在项目后期我需要加入自己的功能。

三、step1

       说到IP Camera,附带要讲下摄像机一般的输出协议Onvif,现在大多数安防系统的摄像机都支持这种协议,百度百科上是这么说的:

        2008年5月,由安讯士联合博世及索尼公司三方宣布将携手共同成立一个国际开放型网络视频产品标准网络接口开发论坛,取名为ONVIF(Open Network Video Interface Forum,开放型网络视频接口论坛),并以公开、开放的原则共同制定开放性行业标准。

        反正记得有这么个输出协议就行了,这对项目没有太大影响,还有一个输出协议就是RTSP,这两个输出协议是EasyNVR主要的规格需求。然后安摄像头的事情我就不多说了,跟本文的主题没有太大的关系,我用的是EasyN的摄像头,挺清楚的。

四、step2

       重点是接下来要讲的视频传输协议HLS和RTMP,要讲后端获取的视频流渲染到前端,离不开这两种协议。大家可以先去下载EasyNVR的客户端文件,这是EasyNVR的官方下载地址:

EasyNVR官方下载地址

        下载之后是一个解压包,是一个绿色文件,直接解压就行,然后按照里面的“EasyNVR互联网直播服务器使用说明书”去配置相关信息,这些东西都很简单,就不过多叙述了。

      重点给大家讲一下HLS(HTTP Live Streaming)传输协议,作为H5的御用传输协议,很是好用。它的原理就是在后端生成一个存储视频流的文件夹,里面存放着一个.m3u8的索引文件,索引指向与该索引文件同级的视频流.ts文件,视频能力层不断的截取新的.ts文件,也在不断地刷新.m3u8文件,我们只需要在前端继承的视频播放器中引入.m3u8文件的URL即可不断获取.ts文件。而EasyNVR作为本次项目使用的视频能力层,他也开放了端口我们提供了我们所需的.m3u8的URL。在EasyNVR根目录下的另一个文档“EasyNVR网络摄像机互联网直播方案及二次开发文档”中,就为大家介绍了EasyNVR开放的所有API。找到我们将来最需要的两个接口,记住他们大概的“样子”。包括接收的参数、相应文本中的对象信息等等。

       其实到了这一步有经验的人应该都知道了大概的解决方案了。无非就是再写个前端播放器,然后引入后端传回的URL就好了,只需要替换其中的{host}或者拼接一下域名就好了。前端播放器的编写我也不做过多叙述了,我把源码托管在了github上,大家直接下载然后修改demo里面的参数就可以了。

H5 video player下载地址

在EasyNVR的根目录下开启start.bat,然后咱们自己写个ajax去调咱们自己内网的API接口,获取URL。以下是我写的代码

$.ajax({

type: "get",

url: "http://easynvr.easydarwin.org:10800/api/v1/getchannelstream",

data:{

channel:1,

protocol:"HLS"

},

dataType: "jsonp",

async: true,

success: function(resp) {

console.log(resp);

}

});

我调的是官方提供的域名,响应回的文本是下面这样的:


       如果把传输到后端的data的protocol的value改为RTMP将会输出一段“rtmp://{host}:10935/hls/stream_1”这样的URL,这就相当于是引入存储我们视频流的文件,但是这里有一个需要注意的地方,rtmp协议不支持跨域,如果把我们从其他域名获取的URL直接放到src中去,浏览器会console如下信息:

      但是HLS协议不论跨不跨域都能支持,因为它是基于HTTP协议的,所以我们尽量使用HLS协议传输,在往后端传递参数的时候,我们尽量使用protocol:"HLS"。对于传回的HLS URL,我们还需要后期为他拼接域名,域名就是我们调用API时候的主域名,这里指的就是“easynvr.easydarwin.org:10800”。最后拼接出的完整的URL如下:“http://easynvr.easydarwin.org:10800/hls/stream_1/stream_1_live.m3u8”,直接塞到大家clone的播放器里面的src就可以了。到了这一步,视频直播的大体原理就基本实现了。最后的效果如下:

video会不断刷新.m3u8,不断获取视频流,实现直播。自己架的EasyNVR同理。

       接下来拓展一些内网穿透的知识。要把内网映射到外网,有很多途径,其中不乏购买域名、购买代理服务器等等操作。现在我说个用于测试的比较常用的方法,那就是内网穿透。我选择的内网穿透软件是natapp,自己花了3块钱卖了一年的专属域名(之前我在狗爹网上挑了一个特别漂亮的域名,.com结尾的,带上优惠码都得要300多/5年,最关键的是在我狠下心要买的时候他居然提示我无法付款,并不知道哪里出了问题,就去用内网穿透了),这是natapp的官网地址:

natapp官网地址

         按照官网里面的教程一步步配置就可以了,全部都是图文教程,0基础也可以弄好,不过得注意在配置通道的时候要把默认端口改为10800,因为我们的EasyNVR用的端口就是它。这就是通过外网访问的效果:


由于涉及隐私视频内容就不作展示了,整个直播架构流程大致就是这样。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容