使用Adobe AIR播放本地文件视频

4
我想使用Adobe AIR播放视频、显示图片和其他Flash内容,并从本地文件系统读取。我一直在搜索API,但还没有能够连接点。
我知道flash.filesystem.File和flash.filesystem.FileStream,并尝试过加载和读取文件。我相信我可以通过这种方式加载图片,但尚未尝试。
至于视频:
mx.controls.VideoDisplay - 似乎接受file:// URI作为源,但我无法使其工作。
flash.media.Video - 可以接受NetStream或直接从视频输入加载视频,但似乎找不到引用本地文件的方法。
有人能帮我吗?我特别想直接从本地硬盘加载和播放视频,而不是从Web服务器或流文件服务器...假设没有网络连接。
稍微相关的问题:从本地文件系统加载视频...(但我的问题不涉及Web浏览器)。
2个回答

11

我需要的用法必须是以编程方式使用的。我一直在寻找一种可以直接使用ActionScript实现的方法。

最终我偶然发现了我所期望的解决方案...它使用了NetStream对象,但(不符合直觉的是)你也可以使用它来访问本地文件:

private function playVideo():void {
  var nc:NetConnection = new NetConnection();
  nc.connect(null);

  var ns:NetStream = new NetStream(nc);

  # onMetaData listener is required otherwise you get a ReferenceError
  var client:Object = new Object();
  client.onMetaData = function(metadata:Object):void {
    trace(metadata.duration);
  }
  ns.client = client;

  var v:Video = new Video();
  v.attachNetStream(ns);
  stage.addChild(v);

  var f:File = new File("/tmp/test.flv");
  ns.play(f.url);
}

啊,我明白了——我没意识到你的意图。很高兴你找到了解决方案——我得把它收藏起来以备将来使用;感谢你的发布! - Christian Nunciato
使用文件的url属性作为NetStream的播放函数参数是我缺失的部分,谢谢! - Ari Black

0

尝试将“-use-network = false”添加到您的Flex编译器设置中。这将使您能够访问本地资源,可能是问题的根源; 沙箱规则有些敏感,因此如果您确定不需要网络连接,则调整此设置可能会放宽一些限制。

还遇到了这个问题,这也可能与此有关:

http://soenkerohde.com/2008/06/playing-local-files-with-air/

在我的情况下,简单测试后,以下两种方法都可以在调试和发布版本中正常工作,而无需修改编译器设置,如果只是使用字面量来引用FLV文件的话。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:VideoDisplay source="D:\Data\Projects\Flex 3\AirLocalVideo\bin-debug\NightSky.flv" />
</mx:WindowedApplication>

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:VideoDisplay source="file://D:/Data/Projects/Flex 3/AirLocalVideo/bin-debug/NightSky.flv" />
</mx:WindowedApplication>

...所以我猜可能需要更多的信息才能诊断。希望这可以帮到你--如果你想分享更多信息,我会关注评论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接