2

現在の私の理解は次のとおりです。

カメラUI

  1. CameraUIを使用して、 MediaType.VIDEOの組み込みカメラにアクセスし、組み込みのビデオ カメラ アプリに委任して、ビデオを録画できるようにします。私のアプリは今それを行います。

  2. 記録を停止して [使用] ボタンをクリックすると、アプリに戻り、理論的には有効なMediaPromiseがあります。

  3. iOS は、記録されたビデオ (または写真) に有効な/使用可能な URL/ファイル名を提供しないため、ローダーを使用して「記録された」ビデオを取り込み/使用/アクセスする必要があります...そして.. . iOS は、実際にはデバイスのどこにもファイルを作成しません。最も重要なのは、システム ネイティブのカメラ/ビデオ アプリを使用するときに通常の動作で期待されるカメラ ロールです。

  4. ドキュメントには、ローダーはさまざまな画像タイプと SWF をロードできるが、ビデオ データについては何もロードできないと記載されているため、 CameraUIを実際に使用して有効なMediaPromiseを生成し、それをローダークラスなどに渡して読み込むことはできないと結論付けています。システム カメラによって作成された情報を操作 (アップロード、applicationStorageDirectoryに保存、および/または API で使用可能な 2 つのビデオ プレーヤー コンポーネントの 1 つに表示)。

カメラロール

  1. iOS カメラ ロールにビデオ エンティティを含めることはできますが、AS3/Air3.5 CameraRollクラスでは、それらを表示/アクセス/参照することはできません。

通常のファイル I/O

  1. Air3.5ファイルクラスを使用してiOS カメラ ロールの保存場所を参照しようとする試みはすべて拒否されました。

------- 質問 -------

  1. ビデオを撮る方法はあるが、キャプチャしたビデオを使用する方法はないと信じているのは正しいですか。(結果の MediaPromise を正常に使用する方法はありません)。

  2. Android を使用してビデオを撮影してアクセスできると思いますが、ドキュメントには iOS を使用できないという記述はありません。

  3. iOS がアプリをサンドボックス化して、標準のファイル I/O を使用してビデオ/写真ストレージを参照できないようにしていると信じているのは正しいですか?

  4. これらは、XCode Objective C++ などのルートを使用して達成できるかなり明白な必要性であると考えるのは間違っていますが、Apple のブロック機能のため、または Adob​​e が合理的な期待に応えられなかったために、AIR Mobile Framework では許可されませんか?

伝える皮肉な一品。iOS システムのカメラ アプリを使用してビデオを録画すると、そのビデオのサムネイルがギャラリー/カメラ ロールに表示されます。もちろん、共有したり、表示したりできます... AIR の CameraRoll を使用する場合。 BrowseForImage()、カメラを使用して別の画像を撮っていない場合、写真が保存されているフォルダーを表示すると、フォルダーアイコンは最後に追加されたオブジェクトのサムネイルを使用します...この場合、ビデオ私は撮ったのですが、その後フォルダに入ると動画が見つかりません。それは私たちをからかっています。存在は知っているが、どうやら禁断の果実らしい。

4

1 に答える 1

2

すべての質問にお答えすることはできないため、このエントリは受け入れられない可能性がありますが、あなたが説明したいくつかの問題の解決策を探しているときにこのページを見つけ、他の誰かがこの回答を (部分的に) 役立つと思うかもしれないと考えました.

撮影したばかりのムービーを保存するには、promise からデータを開いて読み取る必要があります。
iOS はファイルを保存しないため、MediaPromise.fileは常に null です。

これは問題に対する私の解決策です:

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 に答える