WindowsPhone MediaTranscoder с MediaStreamSource

Я пытаюсь создать видео с изображением с помощью класса MediaTranscoder в WindowsPhone 8.1 SDK. Если мне это удастся, я бы использовал его для создания видео с большим количеством изображений.

в приведенном ниже коде я нахожу изображение внутри библиотеки изображений и создаю из нее MediaStreamSample. это работает отлично!

затем я создаю MediaStreamSource с длительностью 1 (сек) и связываю его с образцом, который я создал ранее. это тоже отлично работает!

Что не работает, так это экземпляр 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();

0 ответов

Другие вопросы по тегам