Как загрузить видео из файла в XNA? (Только для ПК) - PullRequest
5 голосов
/ 23 декабря 2009

Я хочу показать текстуру видео в моем приложении с видеофайлом, предоставленным пользователем.

Texture2d имеет метод FromFile, а Video - нет.

Есть идеи? (Мне нужна только поддержка ПК)

Спасибо.

Ответы [ 6 ]

4 голосов
/ 05 января 2010

Вы можете попробовать использовать видео API, добавленный в XNA 3.1, вместе с образцом загрузки содержимого winform на сайте создателей. В этом примере показано, как разрешить пользователю выбирать файл содержимого и заставить систему скомпилировать его в .xnb, а затем загрузить его обратно в память во время выполнения.

2 голосов
/ 08 ноября 2010

Как уже упоминалось в Aphid, вы можете изменить образец загрузки содержимого winform .

Чтобы заставить его принимать WMV, вам нужно изменить его следующим образом:

Добавление VideoImporters в массив сборок в ContentBuilder.cs:

static string[] pipelineAssemblies = 
{ 
     "Microsoft.Xna.Framework.Content.Pipeline.FBXImporter" + xnaVersion, 
     "Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion, 
     "Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion, 
     "Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion, 
     "Microsoft.Xna.Framework.Content.Pipeline.VideoImporters" + xnaVersion    
}; 

Затем в MainForm.cs изменить

contentBuilder.Add(fileName, "Model", null , "ModelProcessor"); 

до

contentBuilder.Add(fileName, "Video", "WmvImporter" , "VideoProcessor"); 

Затем вам нужно будет воспроизвести видео, используя метод, описанный в Воспроизведение видео на поверхности

Этот метод работает только с ошибкой, используя версию 3.1 примера загрузки контента; в XNA 4, как я описал, выдает ошибку Pinvoke . Я отправил сообщение на форумы XNA в надежде найти решение этой проблемы.

РЕДАКТИРОВАТЬ: я получил следующий ответ от разработчика XNA Framework в отношении исключения pinvoke:

Вы можете спокойно проигнорировать это предупреждение. Этот MDA включен по умолчанию VS2010, чтобы указать потенциальные перфект проблемы для pinvokes, которые не имеют объявлено явное соглашение о вызовах. Это раньше было отключено по умолчанию VS2010 так вот почему ты его не видел в 3.1. Мы обнаружили это немного слишком поздно в игре GS4, чтобы заставить его пойти далеко, но по существу нет проблем с функциональностью. Вам следует ударить только тогда, когда вы разработка / отладка вашего кастома процессоры. Это понятно раздражает, и вы можете выключить его вдаваясь в Debug-> Исключения-> Управляемый отладка Assistants-> PInvokeStackImbalance. Мы заставит это уйти на следующий релиз.

1 голос
/ 21 мая 2012

Джон У. Вы можете открыть файл XNB с помощью шестнадцатеричного редактора, и вы увидите формат. Имя соответствующего видеофайла находится там, вы можете перезаписать его нужным именем файла. Это то, что я сделал для своего проекта. Сейчас я работаю над тем, как написать двоичный файл.

1 голос
/ 23 декабря 2009

К сожалению, это не сработает ... их API требует, чтобы видео обрабатывалось через конвейер контента.

Я не обновлял его, так как видео API были выпущены командой XNA, но вы можете проверить этот проект с открытым исходным кодом, который я написал, Scurvy.Media (http://scurvymedia.codeplex.com/). Это был также конвейер контента, но возможно, вы можете изменить его для работы с помощью метода типа .FromFile.

не стесняйтесь обращаться ко мне через codeplex, если у вас есть какие-либо вопросы. : -)

0 голосов
/ 12 ноября 2010

Ну, это заняло у меня некоторое время, но я взломал это.
Просматривать конвейер контента нельзя, так как вам нужно установить GameStudio.
В итоге я реверс-инжиниринг конструктора контента XNA, чтобы выяснить, как сделать мои собственные файлы XNB. Оказывается, что для файлов WMV XNB является простым двоичным дескриптором.
Теперь я просто создаю XNB для любых WMV, которые я нахожу во время выполнения, помещаю его в папку Content,
и работает нормально.

0 голосов
/ 23 декабря 2009

Вы также можете попробовать XNA DirectShow Video Player:
http://xnadsplayer.codeplex.com/

Я никогда не использовал его, поэтому не уверен, насколько хорошо он работает, но это еще один вариант для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...