如何指定跨域策略文件以允许 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) 视频流中获取位图?的主要内容,如果未能解决你的问题,请参考以下文章