Ajax 板


LINE

之前稍微研究过一下 不过是两年前的事情了,可能没有 update 到新资讯 首先目前好取得且 Open Source 的串流伺服器为 nginx-rtmp-module: https://github.com/arut/nginx-rtmp-module SRS: https://github.com/ossrs/srs 收费的串流伺服器有 WOWZA Stream Engine 与 Adobe Media Server 我只有用过 nginx-rtmp-module SRS 只有看过 doc 没有架过 -- 先提 nginx-rtmp, 顾名思义他是 nginx 的一个模组 但它通常不包含於各 distro repository 的 nginx 套件中 至少我用的 Ubuntu 12.04/16.04 都没有,必须把原始码抓下来自己编 执行系统更新的时候要注意把 nginx 从更新名单中移除 我有好几次 apt-get upgrade 弄坏 nginx 再来它最重要的功能是 HTTP Hooks 当使用者串流打上来,或是观众观看串流时,若有设定 hook 会送一个 POST request 到你指定的 URL 而且可以根据 HTTP status code 决定行为 HTTP 2xx 代表接受, HTTP 3xx 代表转移(下述), HTTP 4xx 代表拒绝 使用 HTTP Hooks 可以做到 1. 统计资料 2. 验证 (是否为合法使用者) 3. 隐藏上传者的 RTMP URL (或说 token) 4. 防盗连 当然还有很多应用,但我当初研究只是想复制一个 twitch 而已 XDD 有用过 twitch 等串流服务的人应该都知道 办帐号後会拿到一组 RTMP URL 与 token 这组 token 必须要保证只有上传者知道 不然流出去的话,谁都可以打串流到该频道 当然也有 one time token 或设定 expire 等方式防盗用 不过 twitch 的 token 是固定的 当观众播放的时候,给的网址必须是另一组 rtmp URL 例如上传者的帐号是 test123, token 是 A1B2C3D4 那上传者打串流用的 URL 会是 rtmp://example.com/publish/A1B2C3D4 观众观看串流的 URL 是 rtmp://example.com/play/test123 那如何让 play/test123 这个 URL 播放 publish/A1B2C3D4 呢? 就是透过 HTTP hook 送 HTTP 3xx 并给新的 Location: publish/A1B2C3D4 这对观众来说是透明的,他们看到的播放 URL 仍然是 play/test123 只是伺服器那边从 publish/A1B2C3D4 拉流过来播而已 当然 RTMP 是 flash player 时代的做法 现在 HTML5 的话改用 HLS 或 MPEG DASH 就是另外一回事了 而防盗连则是把给观众的 URL 加上 token 例如 play/test123?ip=x.x.x.x&token=XXOOXXOO&time=1970-01-01T00:00:00.001Z 播放时伺服器透过 hook 去检查 token 是否合法 -- 再来提到 SRS, 这是大陆网友仿 nginx-rtmp 但重新研发的程式 官网上说定位是营运级的网际网路直播伺服器丛集 相较 nginx-rtmp, SRS 号称效能更佳 并且可以很简单的横向扩充更多伺服器集群 而且最重要的是它有完整的中文文件,对中文使用者友善 但它的 HTTP Hooks 就没有 nginx 那麽完整 参考: https://github.com/ossrs/srs/issues/406 幸好 SRS 除了作 origin server 外,也可以当 edge server 所以如果对 hooks 有进阶需求的人可以考虑 用 nginx-rtmp 作 origin, SRS 当 edge server 或是像 Soft_Job 板 #1OjQmi51 作者 xxoo1122 写的文章一样 用 Wowza 当 origin, SRS 做 edge server (因为 Wowza 授权要钱) -- 再来谈到 web browser 支援,当然 RTMP 是不能直接用的 目前要不使用 Flash Player 在浏览器播放的话,有两大选择: MPEG Dynamic Adaptive Streaming over HTTP (DASH) Apple HTTP Live Streaming (HLS) 比较常见的串流网站多是用 HLS 虽然 Chrome 与 Firefox 无法直接播放 HLS, 但有 hls.js 可以解决 https://github.com/dailymotion/hls.js hls.js 是浏览器端的脚本,不需占用伺服器资源 而 DASH 其实也不是浏览器原生支援,必须载入 dash.js 或 Shaka Player https://github.com/Dash-Industry-Forum/dash.js https://github.com/google/shaka-player twitch 与 livehouse.in 都采用 HLS,原因我不是很清楚 XD 那有直播网站使用 DASH 吗? 有的,而且还很大间──就是 YouTube DASH 与 HLS 都是先把串流切成一小段档案 (几秒) 并可能切成 480p, 720p, 1080p 等等多种解析度存放 所以可以依据使用者装置规格及网路状态,选择适合的解析度 由於必须先把串流存成档案,所以延迟绝对比 RTMP 高 SRS 官方说 HLS 延迟高达 10 秒以上 (DASH 应该也差不多) 但好处是可以把切出来的档案丢给 HTTP server 去处理 不用劳烦 RTMP server 同时接收及播放串流 DASH 与 HLS 最大的差异在於使用的编码不同 HLS 只能接受 H.264 与 AAC/MP3 所以必须注意授权问题 (感恩 MPEG 赞叹 MPEG) DASH 虽然是 MPEG 设计的,但反而没有限制使用编码 例如 YouTube 会打 WebM (VP9) 串流给使用者 而 WebM (包含 VP8, VP9, Vorbis, Opus) 都是不需授权费的 BUT !!! 使用 DASH 技术却要付授权费,毕竟是 MPEG 嘛... 所以严格来说,能播放 DASH 的浏览器,开发商就要付钱给 MPEG 这样 Mozilla 会不开心,Google 也不能接受 所以其实浏览器实现的不是 DASH,而是 MSE 问题来了,有 MSE 就能播放 DASH 了吗? 当然不是,这样 MPEG 还是会来收钱啊 所以是透过 JavaScript 实现从 MSE 读取 DASH (或 HLS) 档案并播放 不管 DASH 或 HLS, 都只是告诉浏览器去哪里抓档案回来播而已 真正解码还是需要靠 decoder 处理 可是把 H.264 decoder 整合进浏览器内必须付钱给 MPEG 所以 Mozilla 非常不开心,早期曾努力推广过 WebM (VP8, VP9) 但是 Microsoft 说要用 H.264, Apple 说要用 H.264 就连 Google 号称要移除 H.264 支援,却直到现在仍然没有移除 https://blog.chromium.org/2011/01/html-video-codec-support-in-chrome.html 所以 H.264 成为了事实标准 Mozilla 的妥协是它不内建支援 H.264 但可透过作业系统呼叫系统里的 H.264 decoder 来解 後来 Cisco 跳出来说,要做一款大家都可免费使用的 H.264 decoder 也就是 OpenH264,Mozilla 当然就乐於将它包进 Firefox 专案里了 但是 OpenH264 只能解 base profile, 废到不行 所以最後还是要靠 OS 提供 decoder 那麽是否有 royalty-free 的选择呢? 有的,就是本篇提到很多次的 WebM 这是 Google 推出的开放格式影音容器标准 支援的编码有 VP8, VP9, Vorbis 及 Opus,均为开放标准 而且浏览器支援度不差 Google Chrome, Mozilla Firefox 甚至 Microsoft Edge 都有支援 https://blogs.windows.com/msedgedev/2016/04/18/webm-vp9-and-opus-support-in-microsoft-edge/ 缩:goo.gl/Rhzs8C 唯要使用 WebM 做串流就必须使用 DASH 所以还是要被 MPEG 敲诈 伺服器方面 nginx-rtmp 支援 DASH 与 HLS, SRS 仅支援 HLS 两者皆不包含编码器,故要支援此两者必须加上 FFmpeg 支援 但 SRS 可以把 FFmpeg 静态连结编译进执行档本身 同时 SRS 内建整合 HTTP server, 当然也可以给 Nginx 或 Apache 处理 至於 nginx-rtmp 当然是依存於 Nginx 下罗 最後,再次推荐一定要阅读 Soft_Job 板优良文章 #1OjQmi51 (Soft_Job) https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1488301100.A.141.html 我只是一个只看不写扣的废物 QQ ※ 引述《herbacin (herbacin)》之铭言: : 最近在研究 Node.JS 直播技术的开发, : 不过发现大部分的library都没有支援, : 主要朝 RTMP 与 HTTP-FLV方向研究, 各有优缺点, : 但几乎没有找到相关的套件与文件在 Node.JS的部分 : 不知道各位大大有没有碰过这方面的技术可以分享一下, : 目前知道蛮多直播公司都采用 GoLang 来做直播串流技术的Server开发, : 但Node好像很少, 烦请各位有相关的文献也可以分享 谢谢 -- 本文与 Node.js 及 JavaScript 的关联: 透过 HTTP API 控制 streaming server 才是正确的选择 但要做好 permission control, 不要让外人存取你的 API 以上 --
1F:推 dkchronos :招唤obov 04/16 19:23
2F:推 cesar0909 :楼下obov04/16 19:42
3F:推 SNGoMMX :楼下obov 04/16 21:50
4F:→ y3k :上面好多obov 楼下继续当obov 04/16 21:53
5F:推 obov :恩 没问题 继续当obov04/16 22:20
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.198.141
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1489153298.A.47E.html
6F:推 MangoTW: 头推 03/10 22:14
7F:推 herbacin: 推推 03/10 22:48
8F:推 ian90911: 推 很详细 03/11 01:32
※ 编辑: s25g5d4 (140.117.198.141), 03/11/2017 02:20:47
9F:推 shaopin: 很赞呐, 我本身做CDN的都还没懂这麽全面 给个推 03/12 12:39
10F:推 akccakcctw: 推 03/16 01:22
11F:推 phantasma: 写的真详细,谢谢! 03/20 19:57
12F:推 kahiro: 不推不行... 03/31 22:59
13F:推 andy199113: 好文推 06/09 23:22
14F:推 TFnight: 好详细,不推不行,好多都还看不太懂 06/06 14:39







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP