none
форматы файлов и MediaElement в WPF RRS feed

  • Вопрос

  • WMP до сих пор не знает о существовании таких форматов как mkv и flac и видимо много еще чего. Хотя кодеки нормально с ними работают. Я такую логику вообще не понимаю. Так вот пока я официально через WMP не разрешу воспроизводить такие неизвестные ему форматы MediaElement тоже этого не делает. Как мне этого избежать? Как мне программно разрешить ME проигрывать все что поддерживают кодеки? Если я дам кому-то свою программу, я же не могу сказать "ты сначала настрой все через WMP, а потом уже пользуйся моей программой". Кому это надо?

     И даже когда я через WMP разрешил открывать mkv в ME, он неправильно отображается. На экране в основном одни "дефектные" пиксели вместо изображения.

     Еще я не понял как переводить продолжительность в строку. У меня получается просто слово Automatic. Может есть какой-нибудь встроенный способ отображать текущее время и общее(в таком формате 00:01:34 / 01:25:32)

     И последний вопрос. Как делать ME во весь экран и обратно.

     Я подумал что последние вопросы достаточно простые, чтобы создавать новую тему. Если нет, то я создам.

    19 августа 2011 г. 21:23

Ответы

  • Например, если я все же использую media element, то как сделать так, чтобы он воспроизводил все, что поддерживают кодеки, без дополнительного обращения к wmp за разрешением проигрывать те или иные "незнакомые" форматы.

    Никак, против воли пользователя разрешать проигрывать какие-либо стронние файлы - плохая практика, так не должна поступать программа. К тому же при этом скорей всего будут требоваться права администратора для редактирования рееста. И вот еще допустим вы разрешите проигрывать какой-либо формат, а нужные кодеки в системе не установлены, что делать тогда?

    И почему он дефектно отображает некоторые форматы типа mkv. Как это исправить?

    mkv - это все лишь контейнер, в который упаковываются видео, аудио дорожки, субтитры и прочее. Вам нужно посмотреть каким кодеком упаковано видео, какой битрейт и тп.. сравнить с тем, что воспроизводится без проблем

    А если я сделаю форму на весь экран, как сделать чтобы панель задач не отображалась при этом. И всякие границы и кнопки закрытия тоже.

    Этот вопрос лучше задать отдельной темой с указанием того, что это wpf приложение.

    Есть ли возможность применять Aero дизайн в win forms ?

    И этот тоже в виде отдельной темы.

    На форумах msdn есть где можно оставить предложения по улучшению браузера и будущих версий windows ?

    Специального раздела нет, можете в Разном создать обсуждение. А вне форумов по поводу Windows - оставляйте комментарии в блоге разработчиков Building Windows 8


    Для связи [mail]
    • Помечено в качестве ответа SplinterX 7 сентября 2011 г. 7:06
    7 сентября 2011 г. 5:52

Все ответы

  • MediaElement это обертка для дллок WMP, поэтому проблема гораздо глубже той что вы указали. Например если особо злостны пользователь зайдет в компоненты винды и удалит WMP, то ваша прога и вовсе перестанет работать так как MediaElement не найдет нужные компоненты...

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

    26 августа 2011 г. 4:40
    Отвечающий
  • Ну какие-то длл он мне сам скопировал в папку. Ладно подожду еще какого нибудь ответа. Хотя кажется не дождусь. Все равно спасибо.

    27 августа 2011 г. 10:35
  • Попробуйте воспоизводить видео через DirectX:

    1) нужно скачать DirectX SDK c http://msdn.microsoft.com/directx/sdk/

    2) добавить Microsoft.DirectX.AudioVideoPlayback в проекте в Reference (Project -> Add Reference)

    3) добавить пространство имен - using Microsoft.DirectX.AudioVideoPlayback; (или использовать полные имена Microsoft.DirectX.AudioVideoPlayback.Video video ... )

    Video video = null;
    try
    {
      video = new Video("play.avi");
    }
    catch (Exception ex)
    {
      video = null;
    }
    finally
    {
      if (video != null)
        video.Play();
    }
    

    4) использовать вышеприведенный код для воспроизведения видео (еще с помощью свойства video.Owner можно задать элемент, в котором будет воспроизводиться видео)


    Для связи [mail]
    29 августа 2011 г. 13:26
  • Попробуйте воспоизводить видео через DirectX:

    1) нужно скачать DirectX SDK c http://msdn.microsoft.com/directx/sdk/

    2) добавить Microsoft.DirectX.AudioVideoPlayback в проекте в Reference (Project -> Add Reference)

    3) добавить пространство имен - using Microsoft.DirectX.AudioVideoPlayback; (или использовать полные имена Microsoft.DirectX.AudioVideoPlayback.Video video ... )

    Video video = null;
    try
    {
     video = new Video("play.avi");
    }
    catch (Exception ex)
    {
     video = null;
    }
    finally
    {
     if (video != null)
      video.Play();
    }
    

    4) использовать вышеприведенный код для воспроизведения видео (еще с помощью свойства video.Owner можно задать элемент, в котором будет воспроизводиться видео)


    Для связи [mail]
    Тоже попробовал. Эта библеотека к winForms. можно ли использовать в WPF? А то при назначении video.Owner ругается на сборку Windows.Forms вроде. Даже добавив ее, пишет о невозможности приведения типов. Пробовал привязывать к Grid.
    31 августа 2011 г. 4:09
  • Можно разместить Winfoms элемент внутри WPF, но сначала лучше просто попробуйте создать WinForms приложение и протестировать воспроизведение видео, будет ли оно нормальным или нет, если устроит - то тогда уже можно применить Пошаговое руководство. Размещение элемента управления Windows Forms в приложении WPF с помощью XAML или Пошаговое руководство. Размещение элемента управления Windows Forms в приложении WPF


    Для связи [mail]
    31 августа 2011 г. 6:24
  • > WMP до сих пор не знает о существовании таких форматов как mkv и flac и видимо много еще чего. Хотя кодеки нормально с ними работают. Я такую логику вообще не понимаю.

    у кодеков есть владельцы, авторы, разработчики. без их разрешения нельзя взять кодек и встроить в свою систему.
    разрешения выдают на определенных условиях, которые по каким-либо причинам невыполнимы.
    поэтому многие кодеки не встроены в wmp.

    31 августа 2011 г. 7:19
  • С DirectX у меня тоже проблема похожая была, поэтому и не стал использовать. Попробую еще раз может получится. Сделаю проект с нуля.

    Malobukv,

    Да никто кодеки и не встраивает. Все программы ВЫЗЫВАЮТ их. Не я понимаю, что у многих плееров есть свои внутренние кодеки. Но в основном большая часть пользователей устанавливают внешние (общие) кодеки, такие как K Lite. То етсь все плееры с кодеками работают нормально, а WMP кучу форматов не знает и прежде чем воспроизвести спрашивает доверяете ли вы этму формату. Я и не хочу использовать его внутренние кодеки. А сам напрямую использовать кодеки я не умею.

    Ну или я вообще все неправильно понимаю. Например как тот же DirectX с видео работает? Вызывает кодеки, или в нем встроена поддержка форматов. То есть он и работает в таком случае как кодек. И какие форматы он может воспроизводить?


    И что насчет

    "И даже когда я через WMP разрешил открывать mkv в ME, он неправильно отображается. На экране в основном одни "дефектные" пиксели вместо изображения.

    Еще я не понял как переводить продолжительность в строку. У меня получается просто слово Automatic. Может есть какой-нибудь встроенный способ отображать текущее время и общее(в таком формате 00:01:34 / 01:25:32)

    И последний вопрос. Как делать ME во весь экран и обратно" ?


    1 сентября 2011 г. 10:24
  • Попробуйте использовать обретку над VLC - VideoLan DotNet for WinForm & WPF. Правда этот вариант будет требовать скорее всего наличия самого VLC в системе, но зато и воспроизовоить видео должен без лишних проблем и вопросов.


    Для связи [mail]
    1 сентября 2011 г. 10:36
  • Спасибо за совет. Но мне бы все равно хотелось разобраться с DirectX и MediaElement. Как все устроено я до сих пор и не понял. Хотелось бы получить более детальный ответ на мой последний пост (ну и на первый разумеется)

    Кстати почему Опера с вашим форумом вообще не работает? Страницы не грузит, сообщения не отправляет. Надоело уже в ИЕ каждый раз заходить. Он даже ошибки не выделяет.

    1 сентября 2011 г. 11:10
  • На весь экран и обратно, наверно, нужно разворачивать форму.

    Текущее время, насколько я понимаю, возвращает Position,

    А полное время NaturalDuration

     

    1 сентября 2011 г. 11:37
    Модератор
  • Посмотрите статью на википедии о DirectShow. Может она и не даст детальное представление о том как все работает, но какие-то базовые вещи прояснит.

    (Этот ответ отправлен через оперу, создайте в Изба болтальня обсуждение с вопросом об опере, попробуем выяснить почему так и заодно проверим сталкиваются ли другие пользователи с подобной проблемой)


    Для связи [mail]

    1 сентября 2011 г. 11:39
  • А эта тема вообще будет удалена? А то я хотел сначала еще поразбираться сам, а потом опять задать некоторые вопросы насчет этой же моей темы, но где-то через месяц. Может раньше, может позже.
    3 сентября 2011 г. 18:21
  • Нет, удалятся ничего не будет. Этот вопрос так и остался нерешенным? Если есть решение первоначальной проблемы, то отметьте сообщение с решением (кнопка 'Пометить как ответ'). Если нет, то можете сменить тип топика с вопроса на обсуждение.

    Вопросы, которые у вас возникнут через месяц лучше наверное будет задать отдельными топиками (если вопросы не связаны).

    Спасибо.


    Для связи [mail]
    5 сентября 2011 г. 12:30
  • В принципе, на мои вопросы до конца и не ответили. Скорее предлагают другие варианты.

    Например, если я все же использую media element, то как сделать так, чтобы он воспроизводил все, что поддерживают кодеки, без дополнительного обращения к wmp за разрешением проигрывать те или иные "незнакомые" форматы.

    И почему он дефектно отображает некоторые форматы типа mkv.  Как это исправить?

    А если я сделаю форму на весь экран, как сделать чтобы панель задач не отображалась при этом. И всякие границы и кнопки закрытия тоже.

    NaturalDuration и Position вообще содержат непонятно что. Я так и не смог извлечь из них хотя бы миллисекунды или наносекунды. Хоть какие нибудь секунды.

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

    Есть ли возможность применять Aero дизайн в win forms ?

    На форумах msdn есть где можно оставить предложения по улучшению браузера и будущих версий windows ?

     


    • Изменено SplinterX 5 сентября 2011 г. 21:21
    5 сентября 2011 г. 21:21
  • Например, если я все же использую media element, то как сделать так, чтобы он воспроизводил все, что поддерживают кодеки, без дополнительного обращения к wmp за разрешением проигрывать те или иные "незнакомые" форматы.

    Никак, против воли пользователя разрешать проигрывать какие-либо стронние файлы - плохая практика, так не должна поступать программа. К тому же при этом скорей всего будут требоваться права администратора для редактирования рееста. И вот еще допустим вы разрешите проигрывать какой-либо формат, а нужные кодеки в системе не установлены, что делать тогда?

    И почему он дефектно отображает некоторые форматы типа mkv. Как это исправить?

    mkv - это все лишь контейнер, в который упаковываются видео, аудио дорожки, субтитры и прочее. Вам нужно посмотреть каким кодеком упаковано видео, какой битрейт и тп.. сравнить с тем, что воспроизводится без проблем

    А если я сделаю форму на весь экран, как сделать чтобы панель задач не отображалась при этом. И всякие границы и кнопки закрытия тоже.

    Этот вопрос лучше задать отдельной темой с указанием того, что это wpf приложение.

    Есть ли возможность применять Aero дизайн в win forms ?

    И этот тоже в виде отдельной темы.

    На форумах msdn есть где можно оставить предложения по улучшению браузера и будущих версий windows ?

    Специального раздела нет, можете в Разном создать обсуждение. А вне форумов по поводу Windows - оставляйте комментарии в блоге разработчиков Building Windows 8


    Для связи [mail]
    • Помечено в качестве ответа SplinterX 7 сентября 2011 г. 7:06
    7 сентября 2011 г. 5:52
  • Но я до сих пор не понял как работать с NaturalDuration и Position. Там ерунда какая-то получается. А мне тупо нужно хоть какие-то (мили, нано) секунды.
    10 сентября 2011 г. 14:03
  • Вот, проверено на mp4:

                MessageBox.Show(mediaElement1.Position + " / " + mediaElement1.NaturalDuration.TimeSpan);
                MessageBox.Show(mediaElement1.Position.TotalMilliseconds + " / " + mediaElement1.NaturalDuration.TimeSpan.TotalMilliseconds);
    

    Первый строка выводит видео в привычном формате, вторая в миллисекундах.


    Для связи [mail]
    12 сентября 2011 г. 12:21
  • А как он position и timespan в текст перевел? Когда я что-то подобное пытался сделать он писал, что невозможно привести эти форматы к формату string.

    12 сентября 2011 г. 18:04
  • Неявный вызов метода ToString() при сложении строк


    Для связи [mail]
    12 сентября 2011 г. 21:30