一种微信直播H5直播与存储回放的HLS摄像机方案
接上篇
在上一篇博客《一种流量成本节省60%以上的手机直播微信直播H5直播幼儿园直播方案》中,我们一共介绍了两种省钱的HLS直播途径:
方案一:编码器或者内网推流直接对接云存储的场景
如果我们是一个做编码器或者我们在内网有个直播主机,而且可以对编码器、主机做定制,那么我们可以直接将直播流切片成HLS数据源源不断写入到云存储中,再通过云存储提供的Public或者Private的http地址,就可以直接观看HLS直播,与我们在直播服务器中切片的HLS m3u8地址访问方法一样;
方案二:推流到公网的服务器再做切片
如果我们没有办法或者技术方法改变内网推流端,而是直接购买的直播设备,我们也是可以做到的:购买一台云主机,部署上RTMP服务器(例如EasyDSS),再通过RTMP服务器将切片的HLS直播数据源源不断通过内网的形式写入到云存储中,阿里云也出了一个叫做cloudfs的产品,就是能够直接将OSS云存储挂在到服务器上做为一个磁盘,这样就能想写本地磁盘目录一样,写m3u8+ts文件了,这里的费用也是极低的,首先内网上行到服务器主机的流量是免费的,服务器主机写入到云存储走内网流量也是免费的,流量费用与第一种方式是相似的!
我们今天着重要描述的就是场景一的实现方案,直接在摄像机或者编码器中将直播/存储的HLS数据写入到OSS/七牛云存储这样的云存储中,注意,这里不论是直播类型的HLS,还是点播类型的HLS,都可以写入到云存储中,而且都能够跟正常的直播型HLS或者点播型存储效果是一致的!
实现方法
确定了方向,那么下一步就是应该如何实现呢,我总结了几个层次的需求,按顺序:
Step1:有摄像机/编码器的二次开发权限,能直接在摄像机/编码器的arm系统中植入我们对接云存储的程序;
Step2:对接摄像机/编码器SDK或者协议获取到实时的音视频流,并转换为标准的H.264+AAC(如果有音频);
Step3:将H.264+AAC切片成HLS实时流数据/点播流数据;
Step4:将Step3中的数据通过云存储的SDK写入到云存储的Bucket中;
开发计划
我本身是海康萤石的用户,每个月需要自己付款12元保存7天的录像,我的计划是自己基于厂家的摄像机开发一款云存储摄像机,具备几个功能:
根据摄像机的SDK二次开发,当有移动侦测回调的时候,才启动云存储录像;
存储录像到云存储中保存7/30天;
摄像机原生需要支持H.264,音频转码通过EasyAACEncoder:https://github.com/EasyDarwin/EasyAACEncoder来实现;
HLS切片采用EasyHLS:https://github.com/EasyDarwin/EasyHLS来实现;
云存储当然就用云存储平台提供的SDK二次开发了,例如OSS:https://help.aliyun.com/document_detail/32131.html?spm=5176.87240.400427.51.01eGWx,七牛云:https://developer.qiniu.com/kodo/sdk/1255/cpp
当然阿里云的OSS有直接将4、5两步合并的SDK:https://help.aliyun.com/document_detail/32159.html?spm=5176.87240.400427.55.01eGWx;
获取更多信息
Copyright © EasyDarwin.org 2012-2017

#20171028于北京#
一种微信直播H5直播与存储回放的HLS摄像机方案的更多相关文章
- EasyDarwin开源流媒体服务器实现RTSP直播同步输出MP4、RTMP、HLS的方案思路
背景 近期跟开源团队商量,想在EasyDarwin上继续做一些功能扩展,目前EasyDarwin开源流媒体服务器只能够实现高效的RTSP推流直播转发/分发功能,输入与输出都是RTSP/RTP流,不能够 ...
- 一种流量成本节省60%以上的手机直播微信直播H5直播幼儿园直播方案
前言 近几年视频直播可以说是非常火热,EasyDarwin也非常受开发者的欢迎,不仅仅是主播火了,而且各种商业直播也火了起来:会场直播.宴会直播.讲座直播.景区直播.后厨直播.课堂直播.幼儿园直播等等 ...
- 实现RTSP摄像机硬盘录像机NVR网站网页微信H5直播方案EasyNVR部署问题之:ERR_CONTENT_LENGTH_MISMATCH
背景分析 接触到EasyNVR产品的开发者都知道,EasyNVR是一套功能齐全.简洁易用的流媒体解决方案,可作为能力曾前端接入摄像头,后端接入业务系统使用,也可以作为应用层,直接修改为属于企业用户自己 ...
- h5直播开发之旅总结
前言 关于直播,有很多相关技术文章,这里不多说. 作为前端,我们比较关心我们所需要的. 直播的大致流程: APP端调用摄像头 -> 拍摄视频 -> 实时上传视频 -> 服务器端获取视 ...
- H5直播避坑指南
本文来自"小时光茶社(Tech Teahouse)"公众号 作者简介: 文赫,2015年加入腾讯,作为前端开发工程师参与过手Q游戏公会,游戏中心,企鹅电竞等项目,具有丰富的移动端开 ...
- h5直播
直播开发之旅 ① 状态控制: 目前我们先考虑直播的三种状态: 直播前,直播中,结束. 针对每个状态我们肯定会有不同的显示,这三种状态可以是三个页面,相互切换,或者一个页面,控制页面相关隐藏和显示. 可 ...
- [微信小程序直播平台开发]___(一)介绍与流程
1.一个可以忽略的前言 最近在做的一个项目,客户要做一个直播平台,主播发起视频直播,然后其他人进入房间观看这样子,跟其他直播平台不同的是,主播可以打赏观众,噗. 因为客户要做的是一个民宿的微信小程序, ...
- 视频技术详解:RTMP H5 直播流技术解析
本文聚焦 RTMP 协议的最精华的内容,接进行实际操作 Buffer 的练习和协议的学习. RTMP 是什么 RTMP 全称即是 Real-Time Messaging Protocol.顾名思义就是 ...
- 前端开发:H5直播起航
前言 前不久抽空对目前比较火的视频直播,做了下研究与探索,了解其整体实现流程,以及探讨移动端HTML5直播可行性方案. 发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP,移动 WEB 端 ...
随机推荐
- MQ 分拆Json数据包然后上传
public void UploadInsurHistory() { using (IDbConnection connection = ConnConfig.DmsConnection) { IDb ...
- Codeforces 691E Xor-sequences(矩阵加速DP)
题目链接 Xor-sequences 利用矩阵加速. 先预处理出当序列长度为$2$的时候的方案数. 也就是说这个序列起点是$a[i]$终点是$a[j]$且中间没有任何元素. 但是所求的$k$很大,序列 ...
- 微信公众号开发C#系列-12、微信前端开发利器:WeUI
1.前言 通过前面系列文章的学习与讲解,相信大家已经对微信的开发有了一个全新的认识.后端基本能够基于盛派的第三方sdk搞定大部分事宜,剩下的就是前端了.关于手机端的浏览器的兼容性问题相信一直是开发者们 ...
- 【BZOJ1562】【jzyzOJ1730】【COGS409】NOI2009变换序列 二分图匹配
[问题描述] 对于N个整数0, 1, ……, N-1,一个变换序列T可以将i变成Ti,其中 定义x和y之间的距离.给定每个i和Ti之间的距离D(i,Ti), 你需要求出一个满足要求的变换 ...
- 2016北京集训测试赛(十七)Problem C: 数组
Solution 线段树好题. 我们考虑用last[i]表示\(i\)这个位置的颜色的上一个出现位置. 考虑以一个位置\(R\)为右端点的区间最远能向左延伸到什么位置: \(L = \max_{i \ ...
- delphi 按位运算 not and or xor shl shr
delphi 按位运算 not and or xor shl shr unit Unit1; interface uses Windows, Messages, SysUtils, Var ...
- 缺少 Google API 秘钥,因此 Chromium 的部分功能将无法使用
获取密钥(ID)教程: https://www.chromium.org/developers/how-tos/api-keys 获取密钥(ID)地址: https://cloud.google.co ...
- SQL-基础学习4--聚集函数:AVG(),COUNT(),MAX(),MIN(),SUM();聚集不同值:DISTINCT
第九课 9.1 聚集函数(对某些行运行的函数,计算并返回一个值) 我们经常需要汇总数据而不用把它们实际检索出来,为此SQL提供了专门的函数.使用这些函数,SQL查询可用于检索数据,以便分析和报表生成. ...
- IOS开发~灵活使用 dismissViewControllerAnimated / dismissModalViewControllerAnimated
当遇到: A presentViewController B , B presentViewController C, C presentViewController D,问如何从D一下子回到A, ...
- ios内存管理笔记(二)
1)实现部分: 复制代码 @synthesize window=_window; @synthesize viewController=_viewController; 通常看到的都没有包含=部分,@ ...