Refactor video playback implementation in PLib video library manager. Replace MediaPlayer.Controls with LibVLCSharp for improved performance and compatibility. Update VideoPlayerView and associated ViewModels to accommodate the new video control, ensuring seamless integration with the existing UI. Revise README.md to document changes and new player features.
This commit is contained in:
@@ -78,14 +78,17 @@ dotnet test
|
||||
только по «Сохранить», так что отмена не оставляет следов. Пересканирование запускается
|
||||
только если изменилось то, что влияет на состав библиотеки, — смена темы или ширины кадра
|
||||
его не вызывает.
|
||||
- **Плеер — `GpuMediaPlayer` из `MediaPlayer.Controls`.** Он наследует `OpenGlControlBase`,
|
||||
то есть рисует внутрь композиции Avalonia, а не в нативное дочернее окно: контролы можно
|
||||
класть поверх видео, чего дал бы не всякий плеер. Транспорт (позиция, длительность,
|
||||
- **Плеер — свой контрол `VlcVideoView` поверх LibVLCSharp.** Avalonia создаёт нативное
|
||||
дочернее окно, VLC рисует прямо в него: ни один кадр не проходит через управляемую память.
|
||||
Расплата — airspace: поверх видео ничего нарисовать нельзя, поэтому контролы и сообщения
|
||||
об ошибках живут рядом с картинкой, а не на ней. Транспорт (позиция, длительность,
|
||||
play/pause) — свойства самого контрола, поэтому им управляет code-behind страницы;
|
||||
дублировать это состояние во вьюмодель значило бы держать вторую копию и синхронизировать её.
|
||||
Закрытие страницы обнуляет `OpenedVideo`, вью уходит из дерева — и декодер останавливается.
|
||||
- **Нативный LibVLC подключён намеренно.** Без него бэкенд откатывается на Media Foundation,
|
||||
который не открывает MKV, AVI и WebM — то есть половину того, что сканер кладёт в библиотеку.
|
||||
Закрытие страницы обнуляет `OpenedVideo`, вью уходит из дерева, `DestroyNativeControlCore`
|
||||
гасит плеер.
|
||||
Готовый `MediaPlayer.Controls` пробовали до этого: декодер работал, но кадры до экрана
|
||||
не доходили — чёрный экран и на GPU-, и на CPU-пути, при полностью рабочем в приложении
|
||||
`OpenGlControlBase`. Свой контрол ни от чьей версии Avalonia не зависит.
|
||||
- **Кэш превью самовосстанавливается.** Диск — ключ `sha256(путь|размер|mtime)`, память — LRU
|
||||
на 256 декодированных битмапов. Сканирование проверяет, что запомненный кадр физически
|
||||
на месте (`IThumbnailGenerator.IsAvailable`), и перерисовывает удалённые; после полного
|
||||
|
||||
Reference in New Issue
Block a user