Russian Qt Forum

Qt => Мультимедиа => Тема начата: Fregloin от Октябрь 19, 2013, 20:57



Название: Как записывать интернет радио?
Отправлено: Fregloin от Октябрь 19, 2013, 20:57
Привет. Как записывать интернет радио на диск средствами Qt? С чего начать? Я так понимаю работать придется через QtMuldimedia.
Нашел простенький пример для начала вопроизведения, только вместо локального файла указал url потока.
Код:
void CMediaGrabber::play()
{
    fplayer.setMedia(QUrl("http://stream.frenchkissfm.com:80"));
    fplayer.setVolume(50);
    fplayer.play();
}
В консоли получаю следующее

Warning: "Для типа «audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2, parsed=(boolean)true» недоступен декодер."
Error: "В вашей установке GStreamer отсутствует модуль."


Плагины gstreamer вроде стоят, по крайней мере пытался их поставить, говорит система что уже установлены.


Название: Re: Как записывать интернет радио?
Отправлено: Fregloin от Октябрь 19, 2013, 21:35
установил пакет с ugly кодеками, заработало.

вот мой код:
Код:
CMediaGrabber::CMediaGrabber(QObject *parent) :
    QObject(parent)
{
    connect(&faudioProbe,SIGNAL(audioBufferProbed(QAudioBuffer)),this,SLOT(processBuffer(QAudioBuffer)));
    if(faudioProbe.setSource(&fplayer))
    {
        qDebug("audioProber is attached");
    }
    else
        qDebug("audioProber attach failed");
}

void CMediaGrabber::play()
{
    fplayer.setMedia(QUrl("http://stream.frenchkissfm.com:80"));
    fplayer.setVolume(10);
    fplayer.play();
}

void CMediaGrabber::stop()
{
    fplayer.stop();
}

void CMediaGrabber::processBuffer(QAudioBuffer buffer)
{
    qDebug("buffer bytes %i",buffer.byteCount());
}

Выводит количество принятых данных, звук есть. Теперь как это правильно записать в выходной mp3 файл?
Я так понимаю в processBuffer приходят данные уже распакованные или нет?


Название: Re: Как записывать интернет радио?
Отправлено: Fregloin от Октябрь 19, 2013, 22:05
Нашел класс QMediaRecorder, все как раз для меня, но почему то он возвращает false isAvailable().
Настраивал согласно примеру. Т.е. интернет радио играет, но пока не пишет. Но уже что то.