Electron 中的 RTMP 流式传输 (atom-shell)

RTMP streaming in Electron (atom-shell)

我正在从事一个 Electron 项目,该项目的主要重点是向用户呈现 RTMP 格式的视频流。

我一直在关注一些指南; atom/electron’s official guide; “Using Pepper Flash Plugin” as well as this example app’s slightly more detailed walkthrough,我已经在 Electron 中使用 Flash。我已经能够将各种站点加载到我的主 BrowserWindow 中,并且我目睹了 Pepper Flash 播放电影时的辉煌。

但是,我正在努力尝试在 Electron 中实现自托管播放器。到目前为止,我已经尝试过 JWPlayer 和 video.js,并且所有资源都在很短的时间内很好地加载。

JWPlayer

Flash播放器可见,然后失败并显示错误信息; “Flash 插件加载失败”。

video.js

Flash 播放器可见,但没有任何反应 – 没有按下播放按钮,没有调用 player.play()。没有。

普通

我从我们的任何可用流中都看不到一帧画面,无论是直播还是点播。

我已经尝试按照 JWPlayer’s and video.js’ 文档中的描述修改我的流 URL,但没有雪茄。

我缺乏想象力,需要一双新鲜的或经验丰富的眼睛来看待这个问题。

听起来好像 Flash 插件被阻止了。当 JavaScript 在嵌入后超过 4 秒后 jwplayer.flash.swf 没有收到来自 ActionScript 的 ExternalInterface 调用时,我们会显示“Flash 插件加载失败”错误消息。如果 swf 无法及时加载,这可能只是网络问题,但更可能是浏览器(electron)阻止 Flash 插件执行或与 JavaScript.

通信的另一个问题

我不确定 Chrome/Pepper 当前哪个版本的 Flash 附带 electron,但自 2015 年 10 月以来,插件的执行在某些情况下受到限制。这是关于此 "Power Saving" 功能的文章:http://www.jwplayer.com/blog/chrome-power-saving/

确保 swf 没有跨域托管,也没有使用与其嵌入页面不同的协议。违反 Flash 安全沙箱将阻止 Flash 执行 JS 或加载外部媒体流。

Jakub Szwacz explains it all in an understandable way, and also provides a solution. I fixed an issue in a new Electron project today, and just now realized it’s the same as this one – I just didn’t understand what was wrong the way funrob 试图解释它。