void YouTube::parseVideoPage(QNetworkReply *reply) { QNetworkAccessManager *manager = qobject_cast<QNetworkAccessManager*>(sender()); QMap<int, QString> formats; QString response(QByteArray::fromPercentEncoding(reply->readAll())); response = response.split("fmt_stream_map=url=").at(1); QList<QString> parts = response.split(",url="); int key; for (int i = 0; i < parts.length(); i++) { QString part = parts[i]; QString url(QByteArray::fromPercentEncoding(part.left(part.indexOf("&type=video")).toAscii()).replace("%2C", ",")); key = part.split("&itag=").at(1).split("&").first().toInt(); formats[key] = url; } QList<int> flist; flist << 22 << 35 << 34 << 18 << 5; QString videoUrl; int index = flist.indexOf(playbackFormat); while ((videoUrl == "") && index < flist.size()) { videoUrl = formats.value(flist.at(index), ""); index++; } if (!videoUrl.startsWith("http")) { emit alert(tr("Error: Unable to retrieve video")); emit videoUrlError(); } else { emit gotVideoUrl(videoUrl); } // qDebug() << videoUrl; reply->deleteLater(); manager->deleteLater(); }
void YouTube::parseLiveVideoPage(QNetworkReply *reply) { QNetworkAccessManager *manager = qobject_cast<QNetworkAccessManager*>(sender()); QByteArray response = reply->readAll(); response = QByteArray::fromPercentEncoding(response.simplified().replace(QByteArray(" "), QByteArray(""))); // qDebug() << response; int pos = response.indexOf("fmt_stream_map=") + 18; int pos2 = response.indexOf('|', pos); response = response.mid(pos, pos2 - pos); QByteArray videoUrl = response.replace(QByteArray("\\/"), QByteArray("/")).replace(QByteArray("\\u0026"), QByteArray("&")).replace(QByteArray("%2C"), QByteArray(",")); if (!(videoUrl.startsWith("http"))) { emit alert(tr("Error: Unable to retrieve video")); emit videoUrlError(); } else { emit gotVideoUrl(QString(videoUrl)); } // qDebug() << videoUrl; reply->deleteLater(); manager->deleteLater(); }
DlnaYouTubeVideo::DlnaYouTubeVideo(Logger *log, QString host, int port, QObject *parent) : DlnaVideoItem(log, host, port, parent), m_url(), m_analyzeStream(true), m_videoUrlInProgress(false), m_unavailableMessage(), m_title(), m_streamUrl(), ffmpeg(this), m_youtube(0), mutex(), replyWaitCondition() { m_youtube = new YouTube(); connect(this, SIGNAL(destroyed()), m_youtube, SLOT(deleteLater())); connect(this, SIGNAL(getVideoUrl(QString)), m_youtube, SLOT(getVideoUrl(QString))); connect(m_youtube, SIGNAL(videoNotAvailable(QString)), this, SLOT(videoNotAvailable(QString))); connect(m_youtube, SIGNAL(gotVideoTitle(QString)), this, SLOT(videoTitle(QString))); connect(m_youtube, SIGNAL(gotVideoUrl(QString)), this, SLOT(videoUrl(QString))); connect(m_youtube, SIGNAL(videoUrlError(QString)), this, SLOT(videoUrlError(QString))); }