1

WindowsPhone 8.1 SDK の MediaTranscoder クラスを使用して、画像付きのビデオを作成しようとしています。成功したら、それを使用して、より多くの画像を含むビデオを作成します。

以下のコードでは、写真ライブラリ内の画像を見つけて、そこから MediaStreamSample を作成しています。これはうまくいきます!

次に、期間が 1 (秒) の MediaStreamSource を作成し、それを前に作成したサンプルに関連付けます。これもうまくいきます!

機能しないのは MediaTranscoder インスタンスです。

await transcoder.PrepareMediaStreamSourceTranscodeAsync(src, ras, profile);

上記のメソッドを呼び出すと、「参照がインスタンスに設定されていません」という例外が発生します。(ヌル参照例外)

なぜこれが起こるのかわかりません...助けてください。

StorageFolder cameraFolder = KnownFolders.CameraRoll;
        IReadOnlyList<StorageFile> fileList = await cameraFolder.GetFilesAsync();

        var query = fileList.Where(f => f.Name.StartsWith("JeyLapse")).ToList();

        var stream = await query[0].OpenStreamForReadAsync();

        MediaStreamSample sample =
            await MediaStreamSample.CreateFromStreamAsync(stream.AsInputStream(), (uint)stream.Length, new TimeSpan());


        MediaStreamSource src = new MediaStreamSource(new VideoStreamDescriptor(VideoEncodingProperties.CreateMpeg2()));
        src.Duration = TimeSpan.FromSeconds(1);

        src.SampleRequested += (sender, args) =>
        {
            args.Request.Sample = sample;
        };

        src.Starting += (sender, args) => args.Request.SetActualStartPosition(new TimeSpan());
        src.SwitchStreamsRequested += (sender, args) => args.Request.GetDeferral().Complete();

        MediaTranscoder transcoder = new MediaTranscoder();
        MediaEncodingProfile profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);

        var newFile = await KnownFolders.VideosLibrary.CreateFileAsync("tryJeylapse", CreationCollisionOption.GenerateUniqueName);
        var writestr = await newFile.OpenStreamForWriteAsync();

        var ras = writestr.AsRandomAccessStream();
        transcoder.VideoProcessingAlgorithm = MediaVideoProcessingAlgorithm.Default;

        var trans = await transcoder.PrepareMediaStreamSourceTranscodeAsync(src, ras, profile);
        await trans.TranscodeAsync();
4

0 に答える 0