Название: QMediaPlayer и QIODevice Отправлено: carrygun от Октябрь 26, 2013, 08:51 Здравствуйте.
Возникла проблема с QMediaPlayer, хочу к примеру проигрывать аудио по ссылке и знать загружаемый прогресс. Да, можно у медиа плеера воспользоваться просто setMedia() и передать туда url, но тогда не понятно сколько уже загрузилось. В тот же setMedia() можно передавать поток, а при создании плеера указать флаг QMediaPlayer::StreamPlayback. Я решил воспользоваться QNetworkReply, который вроде как потомок QIODevice. Но вот проблема, я не знаю в какой момент правильно его нужно передавать плееру и когда плеер стартовать. Ничего про QIODevice у плеера в доках не написано, гугление не помогло. Пробовал вызывать у QNAM get и сразу стартовать плеер по QNetworkReply, но эффекта никакого. На первый сигнал readyRead() тоже не проканало, на finished() это уже не то. К слову если попробовать чтото в духе нижеприведенного кода, то все работает: Код
Помогите пожалуйста, если кто сталкивался с такой проблемой, или наставьте на путь истиный. Название: Re: QMediaPlayer и QIODevice Отправлено: Fregloin от Октябрь 28, 2013, 11:10 тоже интересует, но немного в другой ипостаси, хочу записывать потоковое аудио на диск с сжатием... пока ничего вразумительного не нашёл для Qt. QMediaRecorder с QMediaPlayer в связке не работает.
Название: Re: QMediaPlayer и QIODevice Отправлено: carrygun от Октябрь 29, 2013, 05:31 У меня с плеером вообще проблема на проблеме. Оказалось что он даже просто по ссылке не хочет воспроизводить аудио. Из локального файла (QUrl::fromLocalFile) работает, а вот тот же файл по ссылке плеер молчит (кодеки даже обновлял), сигналит только ошибку об InvalidResource. Причем тот же код в Qt 5.0.1 работает нормально. Сижу жду 5.2, может что выйдет.
Название: Re: QMediaPlayer и QIODevice Отправлено: Fregloin от Ноябрь 03, 2013, 23:26 ну у меня кое какой прогресс наметился.
по факту: 1. удалось записать данные потока на диск и они воспроизводятся (ура) 2. поспроизвести поток через QNetworkReply не получилось, делал так же как и Вы. Но есть вопросы: 1 - как узнать в каком формате идет вещание (кодек, битрейт и все такое) 2. как проигрывать данные полученные из потока (пробовал через mediaPlayer, audioDecoder, audioOutput) пока толку никакого. Плеер и декоред говорят что в потоке нет данных, а ouput вообще молчит. Я пордозреваю что я много еще не знаю. Вот привожу свой код как писать в файл. Пробовал открывать в vlc - играет нормально. Код: void MainWindow::readBytes() Название: Re: QMediaPlayer и QIODevice Отправлено: Fregloin от Ноябрь 03, 2013, 23:31 И еще вопрос, в потоке идет в том формате, который на диске на серве или идет декодированный wav?
судя по записанному файлу я понял что шло в mp3. так как vlc сказал что это кодек мп3, битрейт 128 и т.д. При чем в файл я не писал никакого заголовка и закрывал его при нажатии на кнопку, тем не менее vlc играет нормально. В других плеерах не пробовал, пока не ставил. Все это под ubuntu проверялось. Название: Re: QMediaPlayer и QIODevice Отправлено: carrygun от Ноябрь 04, 2013, 12:20 Я не знаю, но проиграть из QNetworkReply у меня не получилось. Тут возможно поток потоку рознь, и из файла играться может нормально, а вот из репли могут быть ограничения. Суть в том, что медиаплеер работает через DirectShow, а там Бог знает как все устроено. Тут либо писать свои плагины, либо использовать другие библиотеки. Возможно, репли содержит лишние заголовки, может еще что. Как вариант, попробуй читать в QBuffer, а уже оттуда в плеер, может чего и выйдет, у меня пока нет времени на это.
P.S. Пока писал пост, краем гляза взглянул в сорцы плагина и нашел интересные строки про поток: Код directshowplayerservice.cpp строка 239. Возможно прокатит следующее: на доступные байты из репли вешать сигнал и писать в QBuffer, а вот потом уже буффер пробовать играть, если конечно он не isSequential(). Так что если у вас есть время, попробуйте и расскажите о результатах. Название: Re: QMediaPlayer и QIODevice Отправлено: Fregloin от Ноябрь 07, 2013, 11:40 Пробовал передавать звук напрямую - идет шум, я так понял нужно сначала жекодировать в wav, а позже уже его передавать а аудиовыход. Но пока не понял как это сделать.
Название: Re: QMediaPlayer и QIODevice Отправлено: carrygun от Ноябрь 08, 2013, 04:24 Я так понимаю что QAudioInput(Output) работают со звуком в raw формате, и медиаплеер их не скушает.
Название: Re: QMediaPlayer и QIODevice Отправлено: Fregloin от Ноябрь 08, 2013, 11:03 Я хочу написать прогу, которая позволяла бы записывать интернет радио в несколько потоков, т.е. одновременно с нескольких радиостанций + возможность прослушивания выбранной станции.
Кое какие наработки есть, но вот пока с декодированием и воспроизведением пока туго. Записать на диск особой проблемы нет, так как данные идут уже в сжатом формате и успешно воспроизовдятся (опробовано), есть несколько загвосток с парсингом метаданных, но это реашемо. А вот с воспроизведением в реальном времени пока туго. Название: Re: QMediaPlayer и QIODevice Отправлено: carrygun от Ноябрь 08, 2013, 12:52 А QNetworkRelpy->QBuffer + QMediaPlayer не проканали? И если мне не изменяет память для радио же чтото было? Просто сейчас под рукой нет Qt и времени мало.
Название: Re: QMediaPlayer и QIODevice Отправлено: Fregloin от Ноябрь 08, 2013, 23:30 Увы не проканало.
Название: Re: QMediaPlayer и QIODevice Отправлено: Montegro от Ноябрь 18, 2014, 20:21 Получилось у кого-нибудь проиграть аудио\видео из QBuffer? Та же проблема. Видео напрямую через m_MPlayer->setMedia(QUrl("http://192...")) получилось (там поступают сырые данные rawvideo на порт)
|