使用您自己的 AMS,如何在 RTMP 流上使用 BitmapData.draw() 而没有安全异常?

Posted

技术标签:

【中文标题】使用您自己的 AMS,如何在 RTMP 流上使用 BitmapData.draw() 而没有安全异常?【英文标题】:Using your own AMS, how can you use BitmapData.draw() on an RTMP stream with no security exception? 【发布时间】:2014-04-10 14:16:26 【问题描述】:

我已经发布了一个关于更一般情况的类似问题,但这个问题专门针对 RTMP。

我们有一个用 AS3 编写的 Adob​​e AIR 应用程序,可以查看来自其他方的实时视频流。话虽如此,当尝试在其中一个远程视频流上调用BitmapData.draw() 时(技术上我们调用ImageSnapshot.captureImage()),我们得到一个2123 错误——一个安全沙箱异常。我看到很多人提到了 AMS 中的一个真正简单的配置,这将允许它适用于 RTMP 流,但他们不断发布损坏的链接、指向仅含糊提及此配置的帖子的链接等。我的一件事确实找到了我无法申请的东西:

http://help.adobe.com/en_US/FlashMediaServer/3.5_SS_ASD/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcb

为了完成上述工作,我尝试将audiosampleAccessvideoSampleAccess 都设置为"/",但无济于事。在 AMS 上的 Application.xml 中,我设置了以下配置:

<FolderAccess>true</FolderAccess>
<AudioSampleAccess enabled="true">*</AudioSampleAccess>
<VideoSampleAccess enabled="true">*</VideoSampleAccess>

我还看到了有关设置广泛开放的跨域策略文件的参考资料,但我看到人们强调这不是必需的,而且我没有看到任何明确提及该策略在服务器上的位置文件需要。然而,我已经开始将NetStream.checkPolicyFile 设置为true,并且我已经在网站本身的根目录中放置了一个跨域策略文件(而不是 AMS)。

请不要只给我另一个链接,除非它是一个快速、清晰的解释。您如何配置 AMS 以允许人们从 RTMP 视频流中捕获屏幕截图?对于上面的文章,我已经尝试将videoStreamAccess和audioStreamAccess都设置为“/”,甚至没有成功。我们还需要能够为 P2P RTMFP 流执行此操作,但这确实是一个不同的问题。谢谢。

【问题讨论】:

【参考方案1】:

我有以下 FMS 代码来修复 application.onConnect 方法中的错误:

client.videoSampleAccess = "/";
client.audioSampleAccess = "/";

【讨论】:

谢谢。不过我试过了,但由于某种原因它没有用。 这 2 个选项(xml 配置和客户端代码属性)只是我在 wowza 和 fms 中使用的 2 个。两者都处于独立模式(无 AWS)。我建议:1)重新检查您是否连接到服务器上的正确应用程序实例。 2) 确保没有其他 UI 元素被 ImageSnapshot.captureImage() 捕获。除了视频之外,您可能还有其他可能导致安全错误的元素。例如,外部加载的图像。尝试在舞台上没有视频的情况下调用 ImageSnapshot.captureImage() 来验证这一点。

以上是关于使用您自己的 AMS,如何在 RTMP 流上使用 BitmapData.draw() 而没有安全异常?的主要内容,如果未能解决你的问题,请参考以下文章

监控 RTMP 流,如果可用则记录

您如何仅通过 Javascript 读取 RTMP 流?

如何断开 rtmp 连接?

从零开发一款Android RTMP播放器

从零开发一款Android RTMP播放器

如何使用 JW Player 播放 rtmp 流?