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

时间:2009-07-31 22:11:15

标签: video rtmp crossdomain.xml

我正在尝试获取在我的客户端上播放的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文件。我不太确定它在哪里寻找它,并且一个wirehark嗅闻是不确定的,所以我尝试在以下每个地方放置一个:

http://localhost/crossdomain.xml
http://localhost:1935/crossdomain.xml
http://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>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我也在使用Wowza,我遇到了和你相同的问题,我在这里做了什么:

  1. 更改了Application.xml配置,为客户端添加*&gt;访问&gt; ...

  2. 加载一个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);
    
  3. eBuildy,Adobe Flex专家