使用Actionscript 3的外部Api制作Flash视频流式网络应用。我正处于项目的一个非常初级的阶段,我们只是试验外部接口。现在我只有一个flash对象和3个按钮,每个按钮播放暂停和加载视频。当前设置为执行任何操作的唯一按钮是加载按钮。我的swf和我的html文件位于同一个文件系统上,我的视频文件位于另一台服务器上,流量通过媒体服务器重定向。
当我按下加载按钮时,它应该只是给它的服务器上的视频文件的路径。相反,它会抛出一个错误,上面写着“错误:错误调用NPObject上的方法”。
如果没有进一步的说明,这里有相关代码的片段:
的ActionScript:
function loadVideo(newVideo){
clearInterval(progressInterval);
videoFile = newVideo;
stream.play(videoFile, 0, 0);
videoPositions = "0,0";
};
ExternalInterface.addCallback( "loadVideo", loadVideo );
JAVSCRIPT :(在我的html文档的头部)
<head>
<title> External API Test</title>
<script type="text/javascript">
var player = getFlashMovie();
if (typeof MY == 'undefined')
{
MY = {};
}
MY.load = function()
{
console.log('load called');
getFlashMovie().loadVideo("/media/preview/09/04/38833_2_720X405.mp4");
};
function getFlashMovie()
{
var isIE = navigator.appName.indexOf('Microsoft') != -1;
return (isIE) ? window['MYVID'] : document['MYVID'];
}
</script>
</head>
HTML :(与javascript相同的文档)
<body>
<div> This is a test</div>
<div class='my-media-player'>
<object width="720" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,16,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id='MYVID'>
<param value="as3VideoPlayer.swf" name="movie">
<param value="high" name="quality">
<param value="true" name="play">
<param value="false" name="LOOP">
<param value="transparent" name="wmode">
<param value="always" name="allowScriptAccess">
<embed width="720" height="405" name='MYVID' allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" loop="false" play="true" src="as3VideoPlayer.swf" wmode="transparent">
</object>
<div>
<button type="button" class='play'>Play</button>
<button type='button' class='pause'>Pause</button>
<button type='button' class='load' onclick='MY.load()'>Load</button>
</div>
</div>
</body>
我的错误在哪里?我在很多地方都读到这是安全问题,但我的swf和html都在我本地机器的同一个文件夹中。只有文件来自外部,无论如何我认为我在对象标签中声明我的flash播放器时正确设置了安全设置,但也许我在那里遗漏了一些东西。
如果你不能直接解决我的问题,有人可以解释一下“NPObject上的错误调用方法”是什么意思?我确定它特定于flash-js通信,因为我以前从未见过它,这就是我从谷歌搜索中收集的内容。
先谢谢。
答案 0 :(得分:1)
我强烈建议SWFObject。除此之外,我敢说你需要允许脚本访问:
<script type="text/javascript">
// put your needed vars in the object below
var flashVars = {};
var params = {
allowScriptAccess:"always"
};
swfobject.embedSWF("myswf.swf", "myswf", "500", "400", "10.0.0", "", flashVars, params);
</script>
答案 1 :(得分:-2)
您可以尝试设置Security.allowDomain('*');你的AS3代码在启动时是什么时候?