-
- QRegExp fmtMapRE(JsFunctions::instance()->webPageFmtMapRE());
- if (fmtMapRE.indexIn(html) == -1) {
- qWarning() << "Error parsing video page";
- // emit errorStreamUrl("Error parsing video page");
- // loadingStreamUrl = false;
- elIndex++;
- getVideoInfo();
- return;
- }
- fmtUrlMap = fmtMapRE.cap(1);
- fmtUrlMap.replace("\\u0026", "&");
- // parseFmtUrlMap(fmtUrlMap, true);
-
-#ifdef APP_DASH
- QSettings settings;
- QString definitionName = settings.value("definition", "360p").toString();
- if (definitionName == QLatin1String("1080p")) {
- QRegExp dashManifestRe("\"dashmpd\":\\s*\"([^\"]+)\"");
- if (dashManifestRe.indexIn(html) != -1) {
- dashManifestUrl = dashManifestRe.cap(1);
- dashManifestUrl.remove('\\');
- qDebug() << "dashManifestUrl" << dashManifestUrl;
- }
- }
-#endif
-
- QRegExp jsPlayerRe(JsFunctions::instance()->jsPlayerRE());
- if (jsPlayerRe.indexIn(html) != -1) {
- QString jsPlayerUrl = jsPlayerRe.cap(1);
- jsPlayerUrl.remove('\\');
- jsPlayerUrl = "http:" + jsPlayerUrl;
- // qDebug() << "jsPlayerUrl" << jsPlayerUrl;
- /*
- QRegExp jsPlayerIdRe("-(.+)\\.js");
- jsPlayerIdRe.indexIn(jsPlayerUrl);
- QString jsPlayerId = jsPlayerRe.cap(1);
- */
- QObject *reply = The::http()->get(jsPlayerUrl);
- connect(reply, SIGNAL(data(QByteArray)), SLOT(parseJsPlayer(QByteArray)));
- connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(errorVideoInfo(QNetworkReply*)));
- }
-}
-
-void Video::parseJsPlayer(QByteArray bytes) {
- QString js = QString::fromUtf8(bytes);
- // qWarning() << "jsPlayer" << js;
-
- // QRegExp funcNameRe("\"signature\"\\w*,\\w*([" + jsNameChars + "]+)");
- QRegExp funcNameRe(JsFunctions::instance()->signatureFunctionNameRE().arg(jsNameChars));
-
- if (funcNameRe.indexIn(js) == -1) {
- qWarning() << "Cannot capture signature function name" << js;
- } else {
- sigFuncName = funcNameRe.cap(1);
- captureFunction(sigFuncName, js);
- // qWarning() << sigFunctions;
- }
-
-#ifdef APP_DASH
- if (!dashManifestUrl.isEmpty()) {
- QRegExp sigRe("/s/([\\w\\.]+)");
- if (sigRe.indexIn(dashManifestUrl) != -1) {
- qDebug() << "Decrypting signature for dash manifest";
- QString sig = sigRe.cap(1);
- sig = decryptSignature(sig);
- dashManifestUrl.replace(sigRe, "/signature/" + sig);
- qDebug() << dashManifestUrl;
-
- if (false) {
- // let phonon play the manifest
- m_streamUrl = dashManifestUrl;
- this->definitionCode = 37;
- emit gotStreamUrl(m_streamUrl);
- loadingStreamUrl = false;
- } else {
- // download the manifest
- QObject *reply = The::http()->get(QUrl::fromEncoded(dashManifestUrl.toUtf8()));
- connect(reply, SIGNAL(data(QByteArray)), SLOT(parseDashManifest(QByteArray)));
- connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(errorVideoInfo(QNetworkReply*)));
- }
-
- return;
- }
- }
-#endif
-
- parseFmtUrlMap(fmtUrlMap, true);
-}
-
-void Video::parseDashManifest(QByteArray bytes) {
- QFile file(Temporary::filename() + ".mpd");
- if (!file.open(QIODevice::WriteOnly))
- qWarning() << file.errorString() << file.fileName();
- QDataStream stream(&file);
- stream.writeRawData(bytes.constData(), bytes.size());
-
- m_streamUrl = "file://" + file.fileName();
- this->definitionCode = 37;
- emit gotStreamUrl(m_streamUrl);
- loadingStreamUrl = false;