c # — создание видео из кадров

В моем приложении windows universal я пытаюсь использовать компонент WinRT: http://blogs.msdn.com/b/eternalcoding/archive/2013/03/06/developing-a-winrt-component-to-create-a-video-file-using-media-foundation.aspx (который в основном является оболочкой C ++ для WinkWriter)

создать видео с кадрами.

Я поместил весь этот код в проект C ++ и могу без проблем вызывать его из своего кода C #.

Сначала проблема с конструктором:

HRESULT CVideoGenerator::InitializeSinkWriter(Windows::Storage::Streams::IRandomAccessStream^ stream)

Я не уверен, как создать поток:

    var filename = "exportedVideo.wmv";
var folder = Windows.Storage.KnownFolders.VideosLibrary;
StorageFile storageFile = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
IRandomAccessStream stream = await storageFile.OpenAsync(FileAccessMode.ReadWrite);

StorageFile file = await StorageFile.GetFileFromPathAsync(App.PhotoModel.Path);
CVideoGenerator videoGenerator = new CVideoGenerator(1280, 720, stream, 20);

Другая вещь исходит из этой строки:

hr = sinkWriter->SetInputMediaType(streamIndex, mediaTypeIn, NULL);
//hr    0xc00d5212 : No suitable transform was found to encode or decode the content.   HRESULT

Есть идеи ?

0

Решение

Я использовал этот пример VideoGenerator и получил ту же проблему.
Я не эксперт Media Foundation, но после некоторых исследований я обнаружил, что проблема заключалась в следующем:

encodingFormat = MFVideoFormat_WMV3;
inputFormat = MFVideoFormat_RGB32;

Ну, я заменил первый формат на второй, например так:

encodingFormat = MFVideoFormat_RGB32;
inputFormat = MFVideoFormat_RGB32;

И, кажется, работает до нового исключения в WriteSample методы

hr = MFCopyImage(
pData,                      // Destination buffer.
cbWidth,                    // Destination stride.
(BYTE*)videoFrameBuffer,    // First row in source image.
cbWidth,                    // Source stride.
cbWidth,                    // Image width in bytes.
videoHeight                // Image height in pixels.
);

Видимо нарушение прав доступа при записи в память.
Все еще пытаюсь понять это!

McSime

0

Другие решения


По вопросам рекламы [email protected]