Захват первого кадра видео с помощью WPF - PullRequest
2 голосов
/ 24 марта 2009

Мне нужно захватить первый кадр видео, загруженного на сайт asp.net. Я действительно хотел бы сделать это с 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

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

Ответы [ 3 ]

2 голосов
/ 25 марта 2009

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

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

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

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

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

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

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

2 голосов
/ 24 марта 2009

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

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

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

http://directshownet.sourceforge.net/

И вы захотите взглянуть на пример Grabber в MSDN:

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

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

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