2009-03-24 3 views
2

Мне нужно захватить первый кадр видео, загружаемого на веб-сайт asp.net. Я действительно хотел бы сделать это с помощью WPF (если это вообще возможно), но если кто-то знает более простой способ, я тоже открыт для этого.Захват первого кадра видео с помощью WPF

Я видел примеры этого с использованием MediaPlayer и RenderTargetBitmap в WPF, но каждый пример предполагает, что видео доступно через URI. В моем сценарии у меня есть только байты файлов, и я не хочу хранить видео непосредственно в FS.

http://blogs.msdn.com/delay/archive/2008/09/03/video-frame-grabbing-made-easy-how-to-quickly-capture-multiple-video-frames-with-wpf.aspx

Любая помощь очень ценится!

ответ

2

Я закончил с использованием FFMpeg.exe (Downloaded from here), чтобы захватить первый кадр видео, загруженных на мой сайт. Это, вероятно, не самое идеальное решение, но у меня нет опыта DirectShow, и, на мой взгляд, это решение намного проще, чем другие упомянутые предложения.

Мне не удалось обойти сохранение файла в файловой системе, поэтому я просто написал загруженные байты во временный файл на диске, выполнив работу с использованием FFMpeg, а затем удалил каждый из файлов, сгенерированных во время процесса.

Обработка для этого выполняется по отдельному потоку из потока запросов. Если я нахожу, что это проблема, у меня есть отдельная служба Windows, с которой я могу без труда разгрузить эту работу.

Синтаксис для получения одного кадра заключается в следующем:

FFMpeg.exe -i "c:\MyPath\MyVideo" -vframes 1 "c:\MyOutputPath\MyImage%d.jpg" 

% D является очень важным. Если вы не включите это, FFMpeg выдает ошибку. При записи файла файл% d заменит серийный номер.

Надеюсь, это поможет!

2

Я не знаю, что это вообще целесообразно, так как это более чем вероятно потребует, чтобы вы запускали какой-либо насос сообщений, что на самом деле является плохой идеей на сайте ASP.NET.

Скорее, я бы использовал API DirectShow, чтобы попробовать и обработать видео. Вы должны : иметь возможность передавать содержимое в виде байтов, используя его, и вам не понадобится цикл сообщений для обработки видео.

Вы можете получить доступ к нему через .NET с использованием DirectShow .NET обертки, расположенные здесь:

http://directshownet.sourceforge.net/

И вы хотите, чтобы посмотреть на Sample Grabber примере на MSDN:

http://msdn.microsoft.com/en-us/library/ms787867(VS.85).aspx

Имейте в виду, что вам может не понадобиться первый кадр, как и в случае с несколькими видео, они могут быть черными и не быть хорошим кандидатом на миниатюру. Скорее вы можете сделать то, что делает Vista, и искать первый нечерный кадр.

+0

Я посмотрю на это, похоже, что это будет очень много работы :( –

+0

@Page Brooks: Он работает с видеокадрами нелегко. Однако для этой обработки в среде где у вас нет доступа к рабочему столу (например, ASP и Media Player в WPF), у вас нет выбора. – casperOne

Смежные вопросы