отображение субтитров для видео в WPF MediaElement

Я работаю над приложением WPF, которое отображает видеоклипы как часть рабочего процесса. Я делаю это, используя MediaElement для воспроизведения локально размещенных (не потоковых) файлов AVI. Работает отлично.

Однако мне только что вручили новое требование, разрешающее отображение субтитров во время воспроизведения клипа. Я понятия не имею, как лучше всего это сделать. Я смутно знаю, что WMP имеет возможность отображать отдельные файлы субтитров при воспроизведении клипа, но я не знаю, поддерживает ли это WPF?

Могу ли я сделать это изначально в WPF? Если нет, то какие у меня варианты?

Мой запасной подход заключался бы в том, чтобы потребовать от клиента запекать субтитры непосредственно в видеофайл, но я бы предпочел найти лучший способ справиться с этим.


person Jason    schedule 29.07.2009    source источник


Ответы (2)


Что ж, если ваше требование к субтитрам - это просто текст, наложенный на MediaElement, тогда да, WPF, безусловно, может это поддерживать. Вам просто нужно поместить MediaElement в сетку вместе с TextBlock.

Настоящая уловка будет заключаться в изменении свойства TextBlock Text в зависимости от времени в MediaElement. Но, вероятно, есть много способов сделать это; первое, что приходит на ум, - это использование триггера, привязанного к MediaElement.Position.

person Charlie    schedule 29.07.2009
comment
Я не хочу сам писать весь код времени и синхронизации - я предполагаю, что если WMP уже обрабатывает это, то WPF тоже. А может и нет. - person Jason; 30.07.2009
comment
Нет, в WPF нет автоматической поддержки субтитров. Однако это функциональность, которую можно довольно легко добавить поверх MediaElement. Посмотрите эту ссылку, например: blogs.msdn.com/anilkumargupta/archive/2009/05/01/ - person Charlie; 30.07.2009

В WPF вам нужно проанализировать файл субтитров и синхронизировать, у вас нет такого события, как MarkerReached, в Silverlight. Но вы можете создать smi (файл SAMI) с тем же именем, что и ваше видео, и поместить его в ту же папку. Затем подпишитесь на событие ScriptCommand и покажите содержимое в текстовом блоке наложения.

person Alexander Zwitbaum    schedule 23.05.2012