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

时间:2009-01-16 03:02:06

标签: flex flash actionscript air

我想播放视频,以及使用adobe air显示图像和可能的其他Flash内容,以及从本地文件系统读取。我一直在搜索API,但我还没有能够连接点。

我知道 flash.filesystem.File flash.filesystem.FileStream ,并尝试过加载和读取文件。我相信我可以用这种方式加载图像,但还没试过。

至于视频:

mx.controls.VideoDisplay当 - 似乎接受了一个file:// URI来源,但是我无法让它工作。

flash.media.Video - 接受NetStream或者可以直接从视频输入加载视频,似乎找不到引用本地文件的方法

任何人都可以帮助我吗?我特别希望直接在本地磁盘上加载和播放视频,而不是从Web服务器或流式文件服务器加载...假设没有网络连接。

稍微相关的问题:Loading a video from the local file system…(但我的问题不涉及网络浏览器)

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

也碰到了这个,这也可能是相关的:

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>

...所以我想如果没有更多的信息可能很难诊断。希望这会有所帮助 - 如果您想分享更多信息,我会留意评论。