Russian Qt Forum

Qt => Работа с сетью => Тема начата: Patrin Andrey от Август 06, 2013, 10:19



Название: QNetworkAccessManager. Ограничение скорости скачивания.
Отправлено: Patrin Andrey от Август 06, 2013, 10:19
Код:
void ClassName::start()
{
    QNetworkAccessManager *manager = new QNetworkAccessManager();
    QNetworkRequest request;
    request.setUrl(url);
    QNetworkReply *reply = manager->get(request);
    connect(reply, SIGNAL(readyRead()), this, SLOT(readyRead()));
}

void ClassName::readyRead()
{
    QNetworkReply* reply = qobject_cast<QNetworkReply*>(QObject::sender());
    allData.append(reply->readAll());     
}

В реальности это видео. С allData работает другой поток, который забирает данные с определённой скоростью, которая меньше скорости скачивания. Есть ли возможность приостановить скачивание на время?


Название: Re: QNetworkAccessManager. Ограничение скорости скачивания.
Отправлено: mutineer от Август 06, 2013, 10:28
Читай не все сразу, а блоками


Название: Re: QNetworkAccessManager. Ограничение скорости скачивания.
Отправлено: Patrin Andrey от Август 07, 2013, 07:54
Вообще это видео - это запись эфира за некоторое число дней. Первоначальное позиционирование осуществляется при запросе урла на видео. При попытке получить видео downloadProgress говорит что bytesTotal = -1. Позиционирование через request.setRawHeader("Range", "bytes=x-y") не поддерживается. Можно как-то иначе?
P.S. хочется решения стандартными методами Qt.


Название: Re: QNetworkAccessManager. Ограничение скорости скачивания.
Отправлено: mutineer от Август 07, 2013, 09:54
Так а что ты сделать хочешь? Вроде ты хотел ограничения скорости, а теперь про позиционирование говоришь


Название: Re: QNetworkAccessManager. Ограничение скорости скачивания.
Отправлено: Patrin Andrey от Август 07, 2013, 10:43
Ну а как я могу читать не всё сразу а блоками без позиционирования.
Если делать не reply->readAll() а read(xxx) то данные всё равно принимаются в какие-то внутренние буферы и жрут память.
reply->setReadBufferSize почему-то не помогает и данные продолжают приниматься.


Название: Re: QNetworkAccessManager. Ограничение скорости скачивания.
Отправлено: Patrin Andrey от Август 07, 2013, 14:36
Если руками сформировать запрос и отправить через QTcpSocket, при этом указав для него setReadBufferSize(х), то получается добиться того чего хочу.

Вопрос к знатокам http: "мне в ответе будут лететь какие-нибудь http заголовки?". Особенно могут ли они прилетать в перемешку с запрошенными данными?