<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Неофициальный форум DLNA Home Media Server &mdash; Алгоритм подписи youtube]]></title>
	<link rel="self" href="https://hms.lostcut.net/extern.php?action=feed&amp;tid=742&amp;type=atom" />
	<updated>2021-08-29T08:14:24Z</updated>
	<generator>PunBB</generator>
	<id>https://hms.lostcut.net/viewtopic.php?id=742</id>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17939#p17939" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>smsbox3 пишет:</cite><blockquote><p>Как она теперь называется?</p></blockquote></div><p>3 символа,&nbsp; <strong>vja</strong></p>]]></content>
			<author>
				<name><![CDATA[Spell]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=625</uri>
			</author>
			<updated>2021-08-29T08:14:24Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17939#p17939</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17938#p17938" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Spell пишет:</cite><blockquote><p>&nbsp; изменил название функции дешифровки подписи,</p></blockquote></div><p>Как она теперь называется?</p>]]></content>
			<author>
				<name><![CDATA[smsbox3]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1305</uri>
			</author>
			<updated>2021-08-29T08:12:30Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17938#p17938</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17937#p17937" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>pukhf пишет:</cite><blockquote><p>Может кто-нибудь подскажет: что исправить?</p></blockquote></div><p>Там сам youtube&nbsp; изменил название функции дешифровки подписи, и скрипт не находит эти ключи и дешифровка подписи не проходит, ссылка получается не действительной для просмотра. В подкасте используется скрипт на серверe WendyH, и как то поправить нет возможности.</p>]]></content>
			<author>
				<name><![CDATA[Spell]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=625</uri>
			</author>
			<updated>2021-08-29T07:49:29Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17937#p17937</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17936#p17936" />
			<content type="html"><![CDATA[<p>Что-то Youtube опять глючит... Какие-то видео показывает, какие-то нет...</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Ну, например:</div><div class="fancy_spoiler"><p>Это видео показывает:)</p><p><a href="https://www.youtube.com/watch?v=1sf9wvXyUDw">Monaldin &amp; Emma Peters - Femme Like U (Teenex Remix)</a></p><p>-----------------------------------------------------------------------------------------------------------------------------------</p><p>А это уже нет:(</p><p><a href="https://www.youtube.com/watch?v=pVg8DjkS1js">Minelli - Rampampam (Robert Cristian Remix)</a></p><p>Обе ссылки из одного и того же плейлиста.</p></div></div><p>Ипользую подкаст с <a href="https://hms.lostcut.net/viewtopic.php?pid=17546#p17546">исправлениями</a> Spell&#039;a.</p><p>Может кто-нибудь подскажет: что исправить?</p>]]></content>
			<author>
				<name><![CDATA[pukhf]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1049</uri>
			</author>
			<updated>2021-08-29T06:35:37Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17936#p17936</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17772#p17772" />
			<content type="html"><![CDATA[<p>У меня youtube стал капчу временами отваливать <img src="https://hms.lostcut.net/extensions/k_smiles/img/ac.gif" alt=":(" /> Вместо кода, с сервера получаю &quot;Из вашей сети отправлено очень много запросов.<br />Чтобы вернуться на YouTube, введите указанный ниже код подтверждени&quot;</p>]]></content>
			<author>
				<name><![CDATA[smsbox3]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1305</uri>
			</author>
			<updated>2021-02-14T16:16:44Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17772#p17772</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17546#p17546" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>михаил пишет:</cite><blockquote><p>Единственный недостаток,кто догадался,вот в этом месте(в самом скрипте GetLink_Youtube31)</p></blockquote></div><p>Есть еще один недостаток, те видео которые имеют подпись с параметром sig не будут воспроизводится.<br />для подкаста youtube 4.4 скрипт <br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;GetLink_Youtube33</div><div class="fancy_spoiler"><div class="codebox"><pre><code>///////////////////////////////////////////////////////////////////////////////
// Получение ссылки на Youtube
bool GetLink_Youtube33(string sLink) {
  string sData, sVideoID=&#039;&#039;, sAudio=&#039;&#039;, sSubtitlesLanguage=&#039;ru&#039;,
  sSubtitlesUrl, sFile, sVal, sMsg, sConfig, sHeaders, hlsUrl, subsUrl, jsUrl, 
  streamMap, algorithm, sType, itag, sig, alg, s, sp; TStringList QLIST;
  int i, n, w, num, height, priority, minPriority = 90, selHeight, maxHeight = 1080, audioQual;
  TJsonObject JSON, PLAYER_RESPONSE, VIDEO; TJsonArray FORMATS, SUBS; TRegExpr RegEx;
  
  sHeaders = &#039;Referer: &#039;+sLink+&#039;\r\n&#039;+
       &#039;User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36\r\n&#039;+
       &#039;Origin: https://www.youtube.com\r\n&#039;;
  
  if (HmsRegExMatch(&#039;--maxheight=(\\d+)&#039;, mpPodcastParameters, sVal)) maxHeight = StrToInt(sVal);
  HmsRegExMatch(&#039;--sublanguage=(\\w{2})&#039;, mpPodcastParameters, sSubtitlesLanguage);
  bool bSubtitles = Pos(&#039;--subtitles&#039; , mpPodcastParameters)&gt;0;  
  bool bAdaptive  = Pos(&#039;--adaptive&#039;  , mpPodcastParameters)&gt;0;  
  bool bQualLog   = Pos(&#039;--qualitylog&#039;, mpPodcastParameters)&gt;0;
  
  if (!HmsRegExMatch(&#039;[\\?&amp;]v=([^&amp;]+)&#039;       , sLink, sVideoID))
    if (!HmsRegExMatch(&#039;youtu.be/([^&amp;]+)&#039;      , sLink, sVideoID))
    HmsRegExMatch(&#039;/(?:embed|v)/([^\\?]+)&#039;, sLink, sVideoID);
  
  if (sVideoID==&#039;&#039;) return;
  
  sLink = gsUrlBase+&#039;/watch?v=&#039;+sVideoID+&#039;&amp;hl=ru&#039;;
  sData = HmsDownloadURL(sLink, sHeaders, true);
  sData = HmsRemoveLineBreaks(sData);
  HmsRegExMatch(&#039;&quot;jsUrl&quot;:&quot;([^&quot;]+)&quot;,&#039;, sData, jsUrl);
  
  if (!HmsRegExMatch(&#039;ytInitialPlayerResponse\\s*=\\s*({.*});&#039;, sData, sConfig, 1, PCRE_SINGLELINE)) {
    HmsLogMessage(2 , mpTitle+&#039;: No ytInitialPlayerResponse data in loaded page.&#039;); 
    return; 
  }
  
  JSON = TJsonObject.Create();
  PLAYER_RESPONSE = TJsonObject.Create();
  QLIST = TStringList.Create();
  try {
    JSON.LoadFromString(sConfig);
    PLAYER_RESPONSE.LoadFromString(JSON.S[&#039;streamingData&#039;]);
    
    // Если есть субтитры и в дополнительных параметрах указано их показывать - загружаем 
    if (bSubtitles &amp;&amp; JSON.B[&#039;captions\\playerCaptionsTracklistRenderer\\captionTracks&#039;]) {
      string sTime1, sTime2, engSubs; float nStart, nDur;
      SUBS = JSON.O[&#039;captions\\playerCaptionsTracklistRenderer\\captionTracks&#039;].AsArray;
      for (i=0; i &lt; SUBS.Length; i++) {
        if (SUBS[i].S[&#039;languageCode&#039;]==sSubtitlesLanguage) subsUrl = SUBS[i].S[&#039;baseUrl&#039;];
        if (SUBS[i].S[&#039;languageCode&#039;]==&#039;en&#039;              ) engSubs = SUBS[i].S[&#039;baseUrl&#039;];
      }
      if ((subsUrl==&#039;&#039;) &amp;&amp; (engSubs!=&#039;&#039;)) subsUrl = engSubs+&#039;&amp;tlang=&#039;+sSubtitlesLanguage;
      if (subsUrl!=&#039;&#039;) {
        sData = HmsDownloadURL(subsUrl+&#039;&amp;fmt=srv3&#039;, sHeaders, true);
        sMsg  = &#039;&#039;; i = 0;
        RegEx = TRegExpr.Create(&#039;(&lt;(text|p).*?&lt;/(text|p)&gt;)&#039;, PCRE_SINGLELINE); // Convert to srt format
        try {
          if (RegEx.Search(sData)) do {
            if      (HmsRegExMatch(&#039;start=&quot;([\\d\\.]+)&#039;, RegEx.Match, sVal)) nStart = StrToFloat(ReplaceStr(sVal, &#039;.&#039;, &#039;,&#039;))*1000;
            else if (HmsRegExMatch(&#039;t=&quot;(\\d+)&#039;         , RegEx.Match, sVal)) nStart = StrToFloat(sVal);
            if      (HmsRegExMatch(&#039;dur=&quot;([\\d\\.]+)&#039;  , RegEx.Match, sVal)) nDur   = StrToFloat(ReplaceStr(sVal, &#039;.&#039;, &#039;,&#039;))*1000;
            else if (HmsRegExMatch(&#039;d=&quot;(\\d+)&#039;         , RegEx.Match, sVal)) nDur   = StrToFloat(sVal);
            sTime1 = HmsTimeFormat(Int(nStart/1000))+&#039;,&#039;+RightCopy(Str(nStart), 3);
            sTime2 = HmsTimeFormat(Int((nStart+nDur)/1000))+&#039;,&#039;+RightCopy(Str(nStart+nDur), 3);
            sMsg += Format(&quot;%d\n%s --&gt; %s\n%s\n\n&quot;, [i, sTime1, sTime2, HmsHtmlToText(HmsHtmlToText(RegEx.Match(0), 65001))]);
            i++;
          } while (RegEx.SearchAgain());
        } finally { RegEx.Free(); }
        sFile = HmsSubtitlesDirectory+&#039;\\Youtube\\&#039;+PodcastItem.ItemID+&#039;.&#039;+sSubtitlesLanguage+&#039;.srt&#039;;
        HmsStringToFile(sMsg, sFile);
        if (Trim(PodcastItem[mpiSubtitleLanguage])!=&#039;&#039;) bAdaptive = false;
        PodcastItem[mpiSubtitleLanguage] = sFile;
      }
    }
    
    hlsUrl = PLAYER_RESPONSE.S[&#039;hlsManifestUrl&#039;];
    //jsUrl  = JSON.S[&#039;assets\\js&#039;];
    
    if (hlsUrl!=&#039;&#039;) {
      MediaResourceLink = &#039; &#039;+hlsUrl;
      bAdaptive = false;
      sData = HmsDownloadUrl(hlsUrl, sHeaders, true);
      RegEx = TRegExpr.Create(&#039;BANDWIDTH=(\\d+).*?RESOLUTION=(\\d+)x(\\d+).*?(http[^#]*)&#039;, PCRE_SINGLELINE);
      try {
        if (RegEx.Search(sData)) do {
          sLink = &#039;&#039; + RegEx.Match(4);
          height = StrToIntDef(RegEx.Match(3), 0);
          if (mpPodcastMediaFormats!=&#039;&#039;) {
            priority = HmsMediaFormatPriority(height, mpPodcastMediaFormats);
            if ((priority&gt;=0) &amp;&amp; (priority&gt;minPriority)) {
              MediaResourceLink = sLink; minPriority = priority;
            }
          } else if ((height &gt; selHeight) &amp;&amp; (height &lt;= maxHeight)) {
            MediaResourceLink = sLink; selHeight = height;
          }
          QLIST.Values[Format(&#039;%.4d&#039;, [height])] = sLink;
        } while (RegEx.SearchAgain());
      } finally { RegEx.Free(); }
      
    } else if (PLAYER_RESPONSE.B[&#039;formats&#039;]) {
      FORMATS = PLAYER_RESPONSE.O[&#039;formats&#039;].AsArray;
      if (FORMATS[0].B[&#039;signatureCipher&#039;])
      algorithm = HmsDownloadURL(&#039;https://hms.lostcut.net/yt/getalgo.php?jsurl=&#039;+HmsHttpEncode(jsUrl));
      for(i=0; i&lt;FORMATS.Length; i++) {
        VIDEO = FORMATS[i];
        if (VIDEO.B[&#039;signatureCipher&#039;]) {
          sLink = HmsHttpDecode(ExtractParam(VIDEO.S[&#039;signatureCipher&#039;], &#039;url&#039;, &#039;&#039;, &#039;&amp;&#039;));
          sig   = HmsHttpDecode(ExtractParam(VIDEO.S[&#039;signatureCipher&#039;], &#039;s&#039;  , &#039;&#039;, &#039;&amp;&#039;));
          sp    = HmsHttpDecode(ExtractParam(VIDEO.S[&#039;signatureCipher&#039;], &#039;sp&#039; , &#039;&#039;, &#039;&amp;&#039;));
          if (sig!=&#039;&#039;) {
            for (w=1; w&lt;=WordCount(algorithm, &#039; &#039;); w++) {
              alg = ExtractWord(w, algorithm, &#039; &#039;);
              if (Length(alg)&lt;1) continue;
              if (Length(alg)&gt;1) TryStrToInt(Copy(alg, 2, 4), num);
              if (alg[1]==&#039;r&#039;) {s=&#039;&#039;; for(n=Length(sig); n&gt;0; n--) s+=sig[n]; sig = s;   } // Reverse
              if (alg[1]==&#039;s&#039;) {sig = Copy(sig, num+1, Length(sig));                     } // Clone
              if (alg[1]==&#039;w&#039;) {n = (num-Trunc(num/Length(sig)))+1; Swap(sig[1], sig[n]);} // Swap
            }
          }
          sLink += &#039;&amp;&#039;+sp+&#039;=&#039;+sig;
        } else {
          sLink = VIDEO.S[&#039;url&#039;];
        }
        height = VIDEO.I[&#039;height&#039;];
        if (height&gt;0) QLIST.Values[Format(&#039;%.4d&#039;, [height])] = sLink;
        if (mpPodcastMediaFormats!=&#039;&#039;) {
          priority = HmsMediaFormatPriority(height, mpPodcastMediaFormats);
          if ((priority&gt;=0) || (priority&lt;minPriority)) {
            MediaResourceLink = sLink; minPriority = priority; selHeight = height;
          }
        } else if ((height&gt;selHeight) &amp;&amp; (height&lt;= maxHeight)) {
          MediaResourceLink = sLink; selHeight = height;
          
        } else if ((height&gt;=selHeight) &amp;&amp; (height&lt;= maxHeight) &amp;&amp; (VIDEO.I[&#039;itag&#039;] in ([18,22,37,38,82,83,84,85]))) {
          // Если высота такая же, но формат MP4 - то выбираем именно его (делаем приоритет MP4)
          MediaResourceLink = sLink; selHeight = height;
        }
      }
    } 
    if (bAdaptive || (MediaResourceLink==&#039;&#039;) &amp;&amp; PLAYER_RESPONSE.B[&#039;adaptiveFormats&#039;]) {
      FORMATS = PLAYER_RESPONSE.O[&#039;adaptiveFormats&#039;].AsArray;
      if (FORMATS[0].B[&#039;signatureCipher&#039;] &amp;&amp; (algorithm==&#039;&#039;))
       algorithm = HmsDownloadURL(&#039;https://hms.lostcut.net/yt/getalgo.php?jsurl=&#039;+HmsHttpEncode(jsUrl));
      for(i=0; i&lt;FORMATS.Length; i++) {
        VIDEO = FORMATS[i];
        if (VIDEO.B[&#039;signatureCipher&#039;]) {
          sLink = HmsHttpDecode(ExtractParam(VIDEO.S[&#039;signatureCipher&#039;], &#039;url&#039;, &#039;&#039;, &#039;&amp;&#039;));
          sig   = HmsHttpDecode(ExtractParam(VIDEO.S[&#039;signatureCipher&#039;], &#039;s&#039;  , &#039;&#039;, &#039;&amp;&#039;));
          sp    = HmsHttpDecode(ExtractParam(VIDEO.S[&#039;signatureCipher&#039;], &#039;sp&#039; , &#039;&#039;, &#039;&amp;&#039;));
          if (sig!=&#039;&#039;) {
            for (w=1; w&lt;=WordCount(algorithm, &#039; &#039;); w++) {
              alg = ExtractWord(w, algorithm, &#039; &#039;);
              if (Length(alg)&lt;1) continue;
              if (Length(alg)&gt;1) TryStrToInt(Copy(alg, 2, 4), num);
              if (alg[1]==&#039;r&#039;) {s=&#039;&#039;; for(n=Length(sig); n&gt;0; n--) s+=sig[n]; sig = s;   } // Reverse
              if (alg[1]==&#039;s&#039;) {sig = Copy(sig, num+1, Length(sig));                     } // Clone
              if (alg[1]==&#039;w&#039;) {n = (num-Trunc(num/Length(sig)))+1; Swap(sig[1], sig[n]);} // Swap
            }
          }
          sLink += &#039;&amp;&#039;+sp+&#039;=&#039;+sig;
        } else {
          sLink = VIDEO.S[&#039;url&#039;];
        }
        if (VIDEO.B[&#039;audioSampleRate&#039;] &amp;&amp; (audioQual &lt; VIDEO.I[&#039;bitrate&#039;])) {
          sAudio = sLink; audioQual = VIDEO.I[&#039;bitrate&#039;]; continue; 
        }
        height = VIDEO.I[&#039;height&#039;];
        if (height&gt;0) QLIST.Values[Format(&#039;%.4d&#039;, [height])] = sLink;
        if (mpPodcastMediaFormats!=&#039;&#039;) {
          priority = HmsMediaFormatPriority(height, mpPodcastMediaFormats);
          if ((priority&gt;=0) || (priority&lt;minPriority)) {
            MediaResourceLink = sLink; minPriority = priority; selHeight = height;
          }
        } else if ((height&gt;selHeight) &amp;&amp; (height&lt;= maxHeight)) {
          MediaResourceLink = sLink; selHeight = height;
        }
      }
      sVal = &quot;&quot;; if (Trim(mpTimeStart)!=&quot;&quot;) sVal = &quot; -ss &quot;+mpTimeStart;
      if (bAdaptive &amp;&amp; (sAudio!=&#039;&#039;)) {
        if (Pos(&#039;--downloadaudio&#039;, mpPodcastParameters)&gt;0) {
          sFile = HmsTempDirectory+&#039;\\&#039;+PodcastItem.ItemID+&#039;.webm&#039;;
          if (!FileExists(sFile))
            HmsDownloadURLToFile(sAudio, sFile, sHeaders, true);
        } else sFile = sAudio;
        MediaResourceLink = &#039;-hide_banner -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -fflags +genpts -i &quot;&#039;+Trim(MediaResourceLink)+&#039;&quot;&#039;+sVal+&#039; -i &quot;&#039;+Trim(sFile)+&#039;&quot;&#039;;
      }
    }
    // Если еще не установлена реальная длительность видео - устанавливаем
    if ((Trim(mpTimeLength)==&#039;&#039;) || (RightCopy(mpTimeLength, 6)==&#039;00.000&#039;) &amp;&amp; (hlsUrl==&#039;&#039;)) {
      PodcastItem[mpiTimeLength] = HmsTimeFormat(JSON.I[&#039;videoDetails\\lengthSeconds&#039;]);
    }
    if (bQualLog) {
      QLIST.Sort();
      sMsg = &#039;Доступное качество: &#039;;
      for (i = 0; i &lt; QLIST.Count; i++) {
        if (i&gt;0) sMsg += &#039;, &#039;;
        sMsg += IntToStr(StrToInt(QLIST.Names[i])); // Обрезаем лидирующие нули
      }
      sMsg += &#039;. Выбрано: &#039; + Str(selHeight);
      HmsLogMessage(1, mpTitle+&#039;. &#039;+sMsg);
    }
  } finally { JSON.Free; PLAYER_RESPONSE.Free; QLIST.Free; }
}

///////</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[Spell]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=625</uri>
			</author>
			<updated>2020-12-20T23:06:10Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17546#p17546</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17536#p17536" />
			<content type="html"><![CDATA[<p>Единственный недостаток,кто догадался,вот в этом месте(в самом скрипте GetLink_Youtube31) </p><div class="codebox"><pre><code> } else {
    sData = HmsJsonDecode(sData);
    HmsRegExMatch(&#039;&quot;itag&quot;:248,&quot;url&quot;\\s*:\\s*&quot;(.*?)&quot;&#039;, sData, MediaResourceLink);
    return true;
  }</code></pre></div><p> надо изменить itag на то значение,с каким качеством вы предпочитаете смотреть и которое есть на сайте.Выбрать можно из 15 поста,спасибо smsbox3.И спасибо за тест скрипта pukhf</p>]]></content>
			<author>
				<name><![CDATA[михаил]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=760</uri>
			</author>
			<updated>2020-12-16T10:00:43Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17536#p17536</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17534#p17534" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>михаил пишет:</cite><blockquote><p>Скрипт изменен.Выбор качества без ключа,прописано максимальное.Нужен тест,могу и ошибаться.</p></blockquote></div><p>Спасибо, Михаил, работает! Единственное, что я изменил, это поменял 248 на 22, т.к. не было звука, но в HD тоже смотреть можно.</p>]]></content>
			<author>
				<name><![CDATA[pukhf]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1049</uri>
			</author>
			<updated>2020-12-16T07:49:48Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17534#p17534</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17529#p17529" />
			<content type="html"><![CDATA[<p>Скрипт изменен.Выбор качества без ключа,прописано максимальное.Нужен тест,могу и ошибаться.</p>]]></content>
			<author>
				<name><![CDATA[михаил]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=760</uri>
			</author>
			<updated>2020-12-15T10:12:56Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17529#p17529</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17518#p17518" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>pukhf пишет:</cite><blockquote><p>1. Видео только 640 х 360 (adaptive, maxheight не помогают)</p></blockquote></div><p>это по тому, что по коду 18 (mp4,audio/video разрешение) 360p выводит, если оставить 22 ( mp4,audio/video разрешение 720p.) - то будет лучше.<br />Выбор вот здесь, можно просто удалить неработающие<br /></p><div class="codebox"><pre><code>if      (itag in ([13,17,160                  ])) height = 144;
        else if (itag in ([5,36,92,132,133,242        ])) height = 240;
        else if (itag in ([6                          ])) height = 270;
        else if (itag in ([18,34,43,82,100,93,134,243 ])) height = 360;
        else if (itag in ([35,44,83,101,94,135,244,43 ])) height = 480;
        else if (itag in ([22,45,84,102,95,136,298,247])) height = 720;
        else if (itag in ([37,46,85,96,137,248,299    ])) height = 1080;
        else if (itag in ([264,271                    ])) height = 1440;
        else if (itag in ([266,138                    ])) height = 2160;
        else if (itag in ([272                        ])) height = 2304;
        else if (itag in ([38                         ])) height = 3072;
        else continue;</code></pre></div><p>Разрешение 1080 и выше, как я понимаю без звука?</p>]]></content>
			<author>
				<name><![CDATA[smsbox3]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1305</uri>
			</author>
			<updated>2020-12-12T12:00:43Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17518#p17518</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17517#p17517" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>михаил пишет:</cite><blockquote><p>Просмотрев исходник,я не наткнулся на player config возможно потому,что его там нет.А ссылки на видео он берет напрямую из <a href="http://www.youtube.com/watch?v=.Тому">http://www.youtube.com/watch?v=.Тому</a> подтверждение,я выкладываю сам скрипт.Не буду спорить может я в чем то ошибся.Или вообще не по теме пищу...</p></blockquote></div><br /><p>Спасибо, Михаил, скрипт рабочий! НО:</p><p>1. Видео только 640 х 360 (adaptive, maxheight не помогают)</p><p>2. Не воспроизводит видео, закодированное WEBP или VP9 (Неопознанный кодек: VLC не может опознать видео- или аудиокодек)</p><p>P.S. Перемотка и длительность видео работает</p>]]></content>
			<author>
				<name><![CDATA[pukhf]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1049</uri>
			</author>
			<updated>2020-12-12T08:02:32Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17517#p17517</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17496#p17496" />
			<content type="html"><![CDATA[<p>Можно сделать привязку с </p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>гитхабом и там все корректировать как у WendyH</p></div></div><p> при обновлении заменять скрипт рабочим....Если вы об этом.</p>]]></content>
			<author>
				<name><![CDATA[михаил]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=760</uri>
			</author>
			<updated>2020-12-11T08:38:42Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17496#p17496</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17494#p17494" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>михаил пишет:</cite><blockquote><p>Просмотрев исходник,я не наткнулся на player config возможно потому,что его там нет.А ссылки на видео он берет напрямую из <a href="http://www.youtube.com/watch?v=.Тому">http://www.youtube.com/watch?v=.Тому</a> подтверждение,я выкладываю сам скрипт.Не буду спорить может я в чем то ошибся.Или вообще не по теме пищу...</p></blockquote></div><p>Так и есть&nbsp; player config&nbsp; больше нет.&nbsp; Скрипт хороший,его еще на php перевести <img src="https://hms.lostcut.net/extensions/k_smiles/img/ab.gif" alt=":)" /> На странице, что отдает youtube есть json, в котором содержатся нужная информация.&nbsp; player config раньше указывал на начало этого&nbsp; json, теперь расположен в другом месте и другое начал. Возможно можно написать универсальную функцию, что находит json и выделяет его на странице, тогда, как бы youtube не менял свой код, куда бы не перемещал json, мы будет выделять json и дальше уже получим рабочие ссылки.</p>]]></content>
			<author>
				<name><![CDATA[smsbox3]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1305</uri>
			</author>
			<updated>2020-12-11T06:27:12Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17494#p17494</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17490#p17490" />
			<content type="html"><![CDATA[<p>Просмотрев исходник,я не наткнулся на player config возможно потому,что его там нет.А ссылки на видео он берет напрямую из <a href="http://www.youtube.com/watch?v=.Тому">http://www.youtube.com/watch?v=.Тому</a> подтверждение,я выкладываю сам скрипт.Не буду спорить может я в чем то ошибся.Или вообще не по теме пищу...</p>]]></content>
			<author>
				<name><![CDATA[михаил]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=760</uri>
			</author>
			<updated>2020-12-10T10:44:54Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17490#p17490</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Алгоритм подписи youtube]]></title>
			<link rel="alternate" href="https://hms.lostcut.net/viewtopic.php?pid=17489#p17489" />
			<content type="html"><![CDATA[<p>Побочный вопрос, какие itag у youtube видео со звуком, что на ТВ работает? Я нашел пока два 18 это mp4,audio/video разрешение 360p<br />и 22&nbsp; &nbsp; это mp4,audio/video разрешение 720p.&nbsp; Но разрешение может быть 480p или 240p - какие там коды?<br />Видел код 132-&nbsp; &nbsp; hls-audio/video-&nbsp; &nbsp; 240p, но не знаю встречается реально или нет?</p><p>Вот здесь нашел описание кодов<a href="https://gist.github.com/sidneys/7095afe4da4ae58694d128b1034e01e2">https://gist.github.com/sidneys/7095afe … b1034e01e2</a> 133-138 без звука идет (дорожка отдельно). Форматы 3D сейчас не актуальны. Будет ли ТВ проигрывать напрямую webm? Впрочем я в тех видео, что хотел посмотреть эти кодеки не встречал.</p>]]></content>
			<author>
				<name><![CDATA[smsbox3]]></name>
				<uri>https://hms.lostcut.net/profile.php?id=1305</uri>
			</author>
			<updated>2020-12-09T20:05:41Z</updated>
			<id>https://hms.lostcut.net/viewtopic.php?pid=17489#p17489</id>
		</entry>
</feed>
