АЗ
Oct. 7, 2016, 6:40 p.m.

Подключение проигрывателя ютуб

Qt, YouTube

Подключаю проигрыватель ютуба в QML. Для этого в main.qml размещаю

WebView {
anchors.fill: parent
url: initialUrl + “?” + “PjFuEGSTjPk”
}

где – initialUrl идет из main.cpp в виде

QUrl initialUrl = QUrl::fromUserInput(QStringLiteral(“qrc://content/player.html”));
context->setContextProperty(QStringLiteral(“initialUrl”), initialUrl);

в ссылке player.html – это страница самосозданная и помещенная рядом с main.qml. В эту страницу по апи ютуба вшит плеер ихний.

Так вот… При запуске на компе все ок. Все работает и показывается видео. Но как только я пытаюсь запустить на мобилке, то говорит мол неможет открыть страницу по такому адресу.

Что я не то для мобилки сделал. Может где не подключил фаайл это самосозданный?

0

Do you like it? Share on social networks!

17
Evgenii Legotckoi
  • Oct. 7, 2016, 9:04 p.m.
Да не факт, что что-то не правильно сделано. Вполне может быть, что проблемы самого WebView при компилировании под ARM.
Вон, WebEngine есть же для MSVC компилятора, а для MinGW пока ещё не сделали. Так что в этом глюки могут быть.
Насколько знаю, по дефолту ютубовский проигрыватель и так-то не очень хорошо поддерживается Qt, но тут я профан, поэтому даже и не знаю, что подсказать.
    Так тут штука то в том что поригрыватель вписан в play.html. Т.е. я просто прошу вебвью открытиь эту страницу и все.
      Evgenii Legotckoi
      • Oct. 7, 2016, 10:44 p.m.
      Ну так функционал-то всех этих iframe и прочего, а также javascript должен поддерживаться нормально. А стопроцентной гарантии поддержки нет. Особенно это касается WebEngine, поскольку он по слухам менее допилен чем WebKit, от поддержки которого в Qt отказались, и который заменён на WebEngine.
        АЗ
        • Oct. 7, 2016, 10:46 p.m.
        Ну вот это конечно неприятно. А есть ли какая альтернатива … Ну т.е. проигрыватель чтоб ролики с ютуба проигрывать?
          АЗ
          • Oct. 7, 2016, 10:59 p.m.

          Опа… вот номер-то) создал эту страницу не локально а на серваке. и Она на мобилке открылась в WebView и все заработало… Т.е. вопрос все тот же … Я по ходу как-то не так передаю данные по локальному пути к этой хэтэмээль странице с плеером.))

          Но то что все работает и на мобилке и локально это факт.

          Но оставлять так это же не верно. Просто сколько запросов к этой странице станет)))

          В общем как-то я не так передаю адрес. А как верно… всю голову изломал. Прост на компето работает с этим видом передачи, а на мобилке …

            Evgenii Legotckoi
            • Oct. 7, 2016, 11:51 p.m.

            Ну теперь более понятна суть, конечно, но тогда здесь получается просто банальное обращение к серверу по определённому URL.
            Если честно, после некоторого размышления после ответа, я даже не понял, почему это на ПК заработало.
            А так да. Имеем страницу на сервере с встроенным сервером и просто открываем её в WebView. Получается топорно, но работает. И запросов будет конечно много к этой странице, хотя если кроме плеера на ней ничего нет, то и не страшно. Хотя я не знаю предполагаемого объёма трафика.

            Может Вам посмотреть документацию по API YouTube? Как вариант, в QML должно поддерживаться потоковое вещание, тот же самый функционал Multimedia, дело останется только за реализацией отправки срабатывания кнопок проигрывания.

              В общем проблема эта не уменя одного И как к ней подобраться не знаю

              вот описание ее

              http://stackoverflow.com/questions/29020930/qt-5-4-qtwebview-failing-to-load-local-html-from-qrc-on-android

              но все что там предложени у меня не работает. Что делать не знаю…

                АЗ
                • Oct. 8, 2016, 2:31 a.m.
                Как я понял это из-за политики безопастности QtWebView, но вот как ее отключить?
                  АЗ
                  • Oct. 8, 2016, 11:09 p.m.

                  Ну а вот и ответ… мать их…

                  Note: The WebView does not support loading content through the Qt Resource system.

                    Evgenii Legotckoi
                    • Oct. 9, 2016, 10:29 a.m.

                    Note: The WebView does not support loading content through the Qt Resource system.

                    Вау. Это я так понимаю в доках Qt написано где-то?
                    Могу тогда предложить следующий вариант.
                    Когда делаете APK для android, то можно воспользоваться директивой INSTALL, тогда можно будет указать, чтобы файл устанавливался в assets и дёргать его оттуда.
                    Один из подписчиков на YouTube так делал для базы данных SQLite, которая должна предустанавлвиваться с APK.

                    android {
                    database.files += mybase.sqlite
                    database.path = assets/
                    INSTALLS += database
                    }

                     

                      Угу. В них. В доках. Прям черным по белому.

                      А про assets это мысля тоже у некоторых проскакивала. Но вот у меня с синтаксисом не очень что-то.
                      Как прописать это в про файле если мой index.html положен в Other files, ну или я просто его рядом с main.qml кинул.?

                      PS а еще один товарисч додумался до того что в исходниках WebView свойство которое ну типа security = true он соответственно на false правил.

                        Evgenii Legotckoi
                        • Oct. 9, 2016, 11:10 p.m.

                        Если рядом с main.qml, то вот типо такого скорее всего будет:

                        android {
                        index.files += index.html
                        index.path = assets/
                        INSTALLS += index
                        }

                        Но это при условии, что index.html и .pro файл находятся в одном каталоге. Иначе там относительные пути надо будет описывать.

                          Неа) Не прокатывает. Ну я резместил код плеера на сервере. Думаю ни чего страшного)
                            Evgenii Legotckoi
                            • Oct. 11, 2016, 2:33 p.m.
                            Да конечно ничего страшного.
                            Какой главный принцип стартапа? – Сначала Тяп-Ляп, и если попёрло, то делаем нормально. Заодно и опыта будет больше через пол года. Там может быть просто напишите обработку потокового вещания с Ютуба без этой галиматьи с WebView.
                              АЗ
                              • Oct. 11, 2016, 5:52 p.m.
                              Не хотел новую тему создавать… Евгений, как называется свойство это… блин ну когда список подтягиваешь к верху… Ну когда конец списка, то его можно немного подтянуть и когда список отпускаешь, то он возвращается вниз))) не знаю как оно это по науке называется.
                              Мне просто его отследить надо для организации подгрузки коментов с сервака, а то то что сейчас мне не очень нравится.. Просто сейчас я отслеживаю всякие там индексы у компонентов, но вот чую, что если знать название этого свойства, то все будет ок))
                                Evgenii Legotckoi
                                • Oct. 11, 2016, 9:21 p.m.

                                Действительно. Не стоило из-за этого новую тему создавать. Ибо, я тоже не знаю как оно называется )))))

                                Хотя понятно, что речь идёт об автоподгрузке, но как оно называется… хз.
                                Может имеется ввиду swipe? … хотя нет…

                                  onDragEnded:  {
                                              if (refreshStart) {
                                                  root.change();
                                                  console.log("Reload data...")
                                                  refreshStart = false;
                                              }
                                          }

                                  В onDragEnded обязательно нужно задать условие относительно которого порисходит отсчет на срабатывание.

                                  В моем примере это refreshStart, который становится true если элемент листвью перешел определенную границу от края.

                                  В общем это почти не отличается от того что я делал без onDragEnded. Также слушал когда что-то там чего-то перейдет по оси Y, но тут вернее т.к. Если не делать так, то каждое изменение по оси Y приводит к созданию запроса к БД и чтоб этого не было приходится писать костыль-ограничитель, а тут в onDragEnded это костыль можно сказать написан и официально узаконен))

                                  Проще говоря onDragEnded – сигнал, который срабатывает когда заканчивается подтягивание контента. Есть еще onDragStarter и onDragChange, ну про что они думаю не стоит говорить))

                                    Comments

                                    Only authorized users can post comments.
                                    Please, Log in or Sign up
                                    • Last comments
                                    • AK
                                      April 1, 2025, 11:41 a.m.
                                      Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                                    • Evgenii Legotckoi
                                      March 9, 2025, 9:02 p.m.
                                      К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                                    • VP
                                      March 9, 2025, 4:14 p.m.
                                      Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
                                    • ИМ
                                      Nov. 22, 2024, 9:51 p.m.
                                      Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                    • Evgenii Legotckoi
                                      Oct. 31, 2024, 11:37 p.m.
                                      Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup