2

我目前的理解是:

相机界面

  1. 我可以使用CameraUI访问MediaType.VIDEO的内置摄像头,并委托给内置摄像机应用程序并让我录制视频。我的应用程序现在可以做到这一点。

  2. 当我停止录制并单击“使用”按钮时,我将返回到我的应用程序,理论上我有一个有效的MediaPromise

  3. iOS 没有为录制的视频(或照片)提供有效/可用的 url/文件名,所以我必须使用加载器来引入/使用/访问“录制的”视频........ . iOS 实际上并没有在设备上的任何地方创建文件,最重要的是,在使用系统本机相机/视频应用程序时正常行为所期望的相机胶卷中。

  4. 文档说Loader可以加载各种图像类型和 SWF,但对视频数据一无所知,因此我得出结论,我实际上不能使用CameraUI生成有效的MediaPromise,然后我可以将其传递给Loader类或类似的类以读取系统摄像头创建的信息然后进行操作(上传、保存到applicationStorageDirectory和/或显示在 API 中可用的两个视频播放器组件之一中)。

相机胶卷

  1. 我可以在iOS 相机胶卷中有视频实体,但 AS3/Air3.5 CameraRoll类不允许我以任何方式查看/访问/引用它们。

普通文件 I/O

  1. 我所有尝试使用 Air3.5 File类浏览到iOS 相机胶卷的存储位置的尝试都被拒绝了。

- - - - 问题 - - - -

  1. 我是否认为有一种方法可以拍摄视频但无法使用已捕获的视频。(无法成功使用生成的 MediaPromise)。

  2. 我相信您可以使用 Android 拍摄视频并访问它,但文档中没有任何内容表明您不能使用 iOS。

  3. 我是否正确地相信 iOS 沙盒应用程序使它们无法使用标准文件 I/O 浏览到视频/照片存储,但只能通过我尝试过的明显不可行的方式(CameraUI 和 CameraRoll)

  4. 我是否错误地认为这些应该是相当明显的需求,人们可以使用 XCode Objective C++ 等路由来实现,但由于 Apple 阻止功能或 Adob​​e 未能满足合理的期望,AIR Mobile Framework 不允许?

要传达的讽刺意味。如果我使用 iOS 系统相机应用程序录制视频,则该视频的缩略图会出现在 Gallery/Camera Roll 中,当然,我可以共享或查看它,或者其他...如果我使用 AIR 的 CameraRoll。 browseForImage(),如果我没有使用相机拍摄另一张图像,当它向我显示存储图片的文件夹时,文件夹图标使用最后添加的对象的缩略图......在这种情况下,我的视频拍了,但是如果我再进入文件夹,就找不到视频了。它在戏弄我们。它知道它在那里,但它显然是禁果。

4

1 回答 1

2

我无法回答您的所有问题,因此此条目可能不可接受,但我在搜索您描述的一些问题的解决方案时找到了此页面,并认为其他人可能会发现此答案(部分)有用。

要保存您刚刚拍摄的电影,您需要打开并读取 promise 中的数据。
iOS 不会保存文件,所以MediaPromise.file总是为空。

这是我对问题的解决方案:

private var camera:CameraUI;
private var dataInput:IDataInput;

public function recordVideo():void
{
    // Start the camera and ask for a video
    camera = new CameraUI();
    camera.addEventListener(MediaEvent.COMPLETE, onCameraComplete);
    camera.launch(MediaType.VIDEO);
}

private function onCameraComplete(event:MediaEvent):void
{   
    // event.data is a MediaPromise and MediaPromise.open() returns a IDataInput
    // Let's cast it to a dispatcher and check when it's complete
    dataInput = event.data.open();
    var dispatcher:IEventDispatcher = IEventDispatcher(dataInput);
    dispatcher.addEventListener(Event.COMPLETE, onDataInputComplete);
}

private function onDataInputComplete(event:Event):void 
{
    // We can do whatever we want with the data, so we'll store it in a File
    var file:File = new File();
    var bytes:ByteArray = new ByteArray();
    var stream:FileStream = new FileStream();

    // Reading the data from the opened MediaPromise
    dataInput.readBytes(bytes);

    stream.open(file, FileMode.WRITE);
    stream.writeBytes(bytes, 0, bytes.bytesAvailable);
    stream.close();
}

另外,我仍在寻找将电影放入 CameraRoll 的方法

于 2013-04-30T19:01:43.673 回答