Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Плеер на основе libvlc
|
|||
|---|---|---|---|
|
#18+
Не получается заставить работать проект из следующего гайда . Проект компилируется, но пробный файл не воспроизводится. Код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 18:45 |
|
||
|
Плеер на основе libvlc
|
|||
|---|---|---|---|
|
#18+
Если не используется какая-то древняя версия, то хочу сказать: разработчики решили, что пользователям не нужна возможность задавать путь к плагинам и выпилили её начисто. Так что плагины живут либо вместе с программой, либо в системе(для Windows если не ошибаюсь в переменной окружения PATH). По ошибкам в логе похоже на то, что плагины не находятся. Немного личного мнения о libvlc. Простота встраивания для просто просмотра видео 5+. Всё остальное это невообразимый ужас. Особенно доставляет документация составленная капитаном очевидность, любящим немного приврать. Проект в котором я использовал libvlc является самым костыльным из всех когда либо мной написанных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 19:30 |
|
||
|
Плеер на основе libvlc
|
|||
|---|---|---|---|
|
#18+
Список того с чем придется столкнуться. Вдруг это у меня кривые руки и кто-нибудь подскажет прямой путь. Небольшое вступление как происходит встраивание vlc в интерфейс приложение: Вы даёте vlc хэндл окна для вывода, он полностью его захавывает и запускает рабочий поток. Дальше вся работа происходит полностью асинхронно: когда вы даёте какую-либо команду она встаёт в очередь команд потока и через некоторое время выполняется. Теперь начнём погружение. Шаг первый: добавляем кнопку старт/стоп и начинаем её жмакать с максимальной скоростью, рекомендуется иметь компьютер постарее. Через некоторое время состояние кнопки не будет соответсвовать происходящему на экране. Похоже vlc может не добавлять некоторые команды в очередь. Что же делать? Находим что мы можем подписаться калбэками на почти всё что происходит внутрях потока, так и сделаем. После нажатия кнопки мы её блокируем и разблокируем в калбэке. Ну или почти так... Калбэк происходит внутри рабочего потока, а с интерфейсом работать из других потоков а-та-та. Да ещё одна досадная мелочь: из калбэка нельзя управлять плеером, вроде на мутексах дедлочится. Ну в общем схема такая: даём команду и вырубаем кнопку, в калбэке посылаем сообщение в основной поток и в основном потоке делаём всё что нужно(включаем кнопку). Вообще всё выглядит весьма логично. Шаг второй: мы хотим обрабатывать клики мышкой по окну где играется видео, а vlc его захавал. Лезем в документацию и сразу видим libvlc_video_set_mouse_input Enable or disable mouse click events handling. By default, those events are handled. This is needed for DVD menus to work, as well as a few video filters such as "puzzle". See also libvlc_video_set_key_input(). Warning This function is only implemented for X11 and Win32 at the moment. Parameters p_mi the media player on true to handle mouse click events, false to ignore them. Очевидно, что это то что нам надо. Немедленно делаём "libvlc_video_set_mouse_input(player, 0);" А оно не работает! В чём же дело? После поисков и чтения всякого, находим единственный форумный пост в котором говорится, что под Windows для того чтобы отключить перехват мыши, надо также отключить перехват клавы "libvlc_video_set_key_input(player, 0);" Клики обрабатываются, но осадочек остался. Шаг третий: мы хотим добавить регулятор громкости. В документации сразу находим libvlc_audio_set_volume. С легким недоверием смотрим на её описание: Set current software audio volume. Parameters p_mi media player i_volume the volume in percents (0 = mute, 100 = 0dB) Returns 0 if the volume was set, -1 if it was out of range Вообще если посмотреть исходный код: -1 возвращается при любой ошибке, которые могут быть разными. Но как говорится "Во многой мудрости много печали; и кто умножает познания, умножает скорбь." поэтому не будем об этом. У меня в vlc версии 2.2.1 всегда возвращает -1 даже если меняет громкость. Скорбь == 0. Есть неприятная особенность о которой опять не упомянуто в описании. Громкость меняется только если происходить проигрывание(пауза вроде тоже сойдёт), но если файл не открыт или остановлен, то громкость не изменится. И тут казалось бы у нас же есть калбэк перед началом воспроизведения из первого шага. Но мы упираемся в то, что не можем управлять плеером из калбэка, а только послать сообщение в основной поток. Если пользователь собирается открыть нечто громкое и предусмотрительно делает очень маленькую громкость, он всё равно будет изснасилован в ухи за те десятки миллисекунд пока ходят сообщения. Я прописал основное с чем предстоит столкнуться. Основная часть моих костылей связана со спецификой проекта: возможность синхронизированно одновременно показывать несколько видео файлов и некоторые другие особенности. Синхронизация состояния нескольких плееров и является основным костыльным адом безумия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 21:19 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39281488&tid=2018466]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 159ms |

| 0 / 0 |
