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();