0

私は非常に単純なプログラムを試しています: AVFoundation を使用してリソース ビデオを読み込み、ビデオ フレーム バイトを OpenGL テクスチャとして取得します。

一般的な流れは非常に簡単です。

  • ビデオをAVAsset
  • 次に、ビデオトラックをAVAssetReaderTrackOutput
  • 私はそれをAVAssetReader
  • 読み始めます
  • そして、各ビデオ フレームに対して を取得しCMSampleBuffer、そこから を取得しCVPixelBufferます。
  • 次に をロックしCVPixelBuffer、これを OpenGL にアップロードします。GL.TexImage2D

エミュレーターではかなりうまく機能しますが、実際のデバイスで試してみると、最初のステップで次のエラーが発生します。

System.InvalidCastException: Cannot cast from source type to destination type.
  at MonoTouch.AVFoundation.AVAsset.FromUrl (MonoTouch.Foundation.NSUrl url) [0x00011] in /Developer/MonoTouch/Source/monotouch/src/AVFoundation/AVAsset.g.cs:231
  at MyTestApp.EAGLView.LoadVideo () [0x00033] in /Volumes/Shared/MyTestApp/MyTestApp/EAGLView.cs:191

例外をスローするコードは次のようになります。

private AVAsset videoAsset;
private AVAssetReaderTrackOutput videoReaderOutput;
private AVAssetReader videoReader;

private void LoadVideo()
{
    var videoPath = NSBundle.MainBundle.PathForResource("video", "mp4");
    var videoURL = NSUrl.FromFilename(videoPath);
    Console.WriteLine ("Loading from " + videoURL.ToString ());
    object videoAssetRaw = AVAsset.FromUrl(videoURL); // Exception thrown here
    videoAsset = videoAssetRaw as AVAsset;
    var tracks = videoAsset.Tracks;
    NSError error;
    AVAssetTrack videoTrack = tracks[0];

    AVVideoSettings settings = new AVVideoSettings ();
    settings.PixelFormat = CVPixelFormatType.CV32BGRA;

    videoReaderOutput = AVAssetReaderTrackOutput.FromTrack(videoTrack, settings.ToDictionary());
    videoReader = new AVAssetReader (videoAsset, out error);
    videoReader.AddOutput (videoReaderOutput);
    videoReader.StartReading ();
}

がスローされていないことを確認するために、直接でobjectはなく に入れましたが、例外が読み取られるように、 の 231 行目でスローされていますが、これはありません。AVAssetInvalidCastExceptionAVAsset.g.cs

ビデオ ファイルは "BundleResource" としてビルドされており、最新バージョンの xamarin (本日ダウンロード済み) を使用しています。

これを引き起こしている可能性のあるアイデアはありますか?

4

1 に答える 1

0

代わりに...

object videoAssetRaw = AVAsset.FromUrl(videoURL);

試す ...

AVUrlAssetOptions options = null;
var asset = new AVUrlAsset (url, options);
于 2013-09-08T20:16:22.820 に答える