Минимальный видеоплеер DirectShow C#

Представляю на обозрение минимальный видеоплеер, написанный на C# с использованием DirectShow. В качестве видео-/аудио-кодеков используется LAV filters, который надо скачать и установить отдельно.

Отличия от других плееров:

  • Абсолютный минимализм. Почти никаких дополнительных функций и настроек.
  • Возможность выбора режима построения Графа DirectShow: Автоматический / Интеллектуальный / Ручной.
  • Не требует установки и ничего не меняет в реестре.

Конструктивная критика приветствуется :grin:

Прикольно. А на Media Foundation это же сможете реализовать?? А то DS вроде как считается уже древней технологией снятой с поддержки и нерекомендуемой к использованию в новых реализациях.

Выбор файла слишком уж минималистичный, как догадаться, что нужно драгндропать )
Надо тогда хоть написать на изначальном черном экране.
И добавить в меню. Ну и раз минимализм, то и через консольный параметр (minplayer video.mp4).


Запустилось на линуксе, но выдало S_FALSE.

Чтобы понять о чем вообще этот код ошибки надо смотреть исходники + он встречается в нескольких местах.
Вот поэтому и лучше кидать исключения с норм описанием. :wink:

Может быть из-за

но после установки с Releases · Nevcairiel/LAVFilters · GitHub то же самое.

Как? В вайне что ли? :thinking: …а, да, вижу, wine

Это всего лишь тестовая версия, демонстрирующая концепт. Объяснять значения кодов ошибок и не планировалось. Эту версию я и релизить не хотел. Я хотел exeшник залить в папку с исходниками (как у некоторых на гитхабе сделано). Но оказалось, что в уже залитую папку можно добавлять только текстовые файлы (ну или я не нашел как). По-этому, пришлось релизнуть.
Я сейчас пишу полную версию. Там, кроме прочего, будут выдаваться понятные ошибки, вместо кодов.

Я не знаю, что такое Media Foundation. Надеюсь, что можно.

Если вы это в вайне делаете, то естественно, что правильная работа виндовых плееров там не гарантирована. Однако, старую Delphi-версию этого плеера в вайне мне удавалось запустить.
Попробуйте поменять режим в меню. После смены режима, текущий файл автоматически перезапускается. И вместо mp4 попробуйте подсунуть ему avi.
Повторюсь, это только тестовая версия.

хм, да, с автоматическим режимом работает.

В конце упало

System.ArgumentOutOfRangeException: Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks.
Parameter name: ticks
   at System.DateTime..ctor(Int64 ticks)
   at Minimal_video_player.Form1.seekBar_Paint(Object sender, PaintEventArgs e)
   at System.Windows.Forms.Control.OnPaint(PaintEventArgs e)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
   at System.Windows.Forms.Control.WmPaint(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Автоматический режим пригоден только для простых форматов: avi, wmv (возможно, что-то еще). Если вы в автоматическом режиме попытаетесь открыть, например, mp4 с форматом avc внутри, то либо сразу получите ошибку, либо лютый треш вместо картинки. Вы какой тип файла открыли?

на последнем кадре трека? В автоматическом режиме?

ffmpeg -i file_example_MP4_1280_10MG.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file_example_MP4_1280_10MG.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41isomavc1
    creation_time   : 2015-08-07T09:13:32.000000Z
  Duration: 00:00:30.53, start: 0.000000, bitrate: 2578 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 2453 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc (default)
    Metadata:
      creation_time   : 2015-08-07T09:13:32.000000Z
      handler_name    : L-SMASH Video Handler
      encoder         : AVC Coding
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2015-08-07T09:13:32.000000Z
      handler_name    : L-SMASH Audio Handler

Артефакты в другом похожем видео и правда есть.

да, ну тут видимо что-то не так с получением позиции после завершения.
AVI так же.

WMV не запускается, Error 262722

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

Переделал проект, пользуясь коммитами. Старый проект удалил.
Надеюсь, ничего не забыл сделать перед релизом и он вообще работает :grin:

Кстати, это значит VFW_S_PARTIAL_RENDER.
Новая версия знает и выдаёт эту ошибку (правда другие не выдаёт :grin: ).

Для WMV надо переключиться в автоматический режим. В других режимах оно не работает. Полная версия будет сама переключаться.