如何指定跨域策略文件以允许 Flash 从 RTMP (Wowza) 视频流中获取位图?

Posted

技术标签:

【中文标题】如何指定跨域策略文件以允许 Flash 从 RTMP (Wowza) 视频流中获取位图?【英文标题】:How do I specify a crossdomain policy file to allow Flash to grab a bitmap from an RTMP (Wowza) video stream? 【发布时间】:2009-07-31 22:11:14 【问题描述】:

我正在尝试获取在我的客户端上播放的 Wowza 视频流的位图​​/快照,如下所示:

var bitmapData:BitmapData = new BitmapData(view.videoPlayerComponent.width, view.videoPlayerComponent.height);
bitmapData.draw(view.videoPlayerComponent);

执行此操作时,我收到以下错误消息:

SecurityError:错误 #2123:违反安全沙箱:BitmapData.draw:http://localhost:51150/Resources/WRemoteWebCam.swf 无法访问 rtmp://localhost/videochat/smithkl42._default/。没有策略文件被授予访问权限。

我认为错误来自无法找到适当的 crossdomain.xml 文件。我不太确定它在哪里寻找它,wireshark 嗅探也没有定论,所以我尝试在以下每个地方放置一个:

http://localhost/crossdomain.xmlhttp://localhost:1935/crossdomain.xmlhttp://localhost:51150/crossdomain.xml

我可以从这三个位置中的每一个位置成功检索文件。 (我很确定最后一个不会有任何影响,因为它只是托管 .swf 文件的页面所在的网站的位置,但机会不大......)

这些是它在每个实例中抓取的文件的内容:

<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="*" /> 
</cross-domain-policy>

它仍然抛出同样的错误信息。

我也按照Wowza forums 上的说明,在[install]\conf[appname]\Application.xml 中打开StreamVideoSampleAccess,没有任何乐趣:

<Client>
    <IdleFrequency>-1</IdleFrequency>
    <Access>
        <StreamReadAccess>*</StreamReadAccess>
        <StreamWriteAccess>*</StreamWriteAccess>
        <StreamAudiosampleAccess>*</StreamAudioSampleAccess>
        <StreamVideoSampleAccess>*</StreamVideoSampleAccess>
        <SharedObjectReadAccess>*</SharedObjectReadAccess>
        <SharedObjectWriteAccess>*</SharedObjectWriteAccess>
    </Access>
</Client>

有什么想法吗?

【问题讨论】:

【参考方案1】:

这不是 crossdomain.xml 问题:这里是 relevant Adobe documentation。我认为this post 也可能会有所帮助。

【讨论】:

感谢您的指点。事实证明,我使用的是 wowza 而不是 FMS,但据说 Wowza 具有相同的安全位。但我已按照 wowzamedia.com/forums/showthread.php?t=4750">this post 中的说明进行操作,但无济于事。编辑问题以包含该信息。 我想通了。您的回答是解决方案的一部分;触发我的问题的另一点是我试图在不存在的流上获取位图。我进行了更智能的尝试/捕捉,我们可以开始了。谢谢。【参考方案2】:

我也在使用Wowza,我遇到了和你一样的问题,我做了什么:

    更改 Application.xml 配置,为客户端添加 * > Access > ...

    加载一个 crossDomain.xml 文件,这里是我用来加载 http 或流文件的代码:

                var url:String = this.vVideos.selectedItem.url;
                var protocol:String = URLUtil.getProtocol(url).toLowerCase();
                var crossDomainXmlUrl:String;
    
                if (protocol == 'rtmp' || protocol == 'rtmpt')
                
                    crossDomainXmlUrl = 'http://' + URLUtil.getServerName(url) + ':1935/crossdomain.xml';
                
                else
                
                    crossDomainXmlUrl = 'http://' + URLUtil.getServerName(url) + '/crossdomain.xml';
                
    
                Security.loadPolicyFile(crossDomainXmlUrl);
    
                this.videoMedia.source = url;
                this.videoMedia.visible = true;
    
                setTimeout(this.play,1000);
    

eBuildy,Adobe Flex 专家

【讨论】:

以上是关于如何指定跨域策略文件以允许 Flash 从 RTMP (Wowza) 视频流中获取位图?的主要内容,如果未能解决你的问题,请参考以下文章

flash的跨域访问策略文件配置详解

浏览器的同源策略与跨域处理

如何从 Eclipse 插件提供 Flash 策略文件?

Tomcat 服务器会自动识别并制定跨域策略文件吗?

跨域策略文件crossdomain.xml文件

跨域-jsonp