<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Неофициальный форум DLNA Home Media Server &mdash; DLNA-будильник]]></title>
		<link>https://hms.lostcut.net/viewtopic.php?id=58</link>
		<atom:link href="https://hms.lostcut.net/extern.php?action=feed&amp;tid=58&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «DLNA-будильник».]]></description>
		<lastBuildDate>Tue, 28 Jun 2016 09:04:02 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=5288#p5288</link>
			<description><![CDATA[<p>Удалось протестировать скрипт. На самсунге 2012 года, дома,&nbsp; работает&nbsp; отлично. На работе,&nbsp; Шарп 2015 года, тупит.<br />Картина следующая. При первом запуске <br /> NO_MEDIA_PRESENT-&gt;TRANSCODING-&gt;PLAYING - начинается воспроизведение.<br /> При следующем запуске скрипта сразу выводит статус&nbsp; STOPPED. <br /> Последующее исполнение&nbsp; - снова проигрывает. <br /> Похоже при передаче POST что-то его останавливает.&nbsp; Может быть для Sharp&nbsp; есть особенность в установках ?.&nbsp; Кстати, HMS автоматически присваивает телеку профиль DLNA Toshiba . Буду копать дальше.<br />Еще&nbsp; раз спасибо за помощь.</p>]]></description>
			<author><![CDATA[null@example.com (samvol79)]]></author>
			<pubDate>Tue, 28 Jun 2016 09:04:02 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=5288#p5288</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=5265#p5265</link>
			<description><![CDATA[<p>Большое спасибо за помощь.&nbsp; Надо сегодня протестировать. Отпишусь.</p>]]></description>
			<author><![CDATA[null@example.com (samvol79)]]></author>
			<pubDate>Sat, 25 Jun 2016 07:06:25 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=5265#p5265</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=5262#p5262</link>
			<description><![CDATA[<div class="quotebox"><cite>samvol79 пишет:</cite><blockquote><p>Вопрос такой, можно ли модернизировать скрипт так , что бы он исполнялся только в случае, если статус другой (not PLAYING)</p></blockquote></div><p>Решил попробовать и пришлось спуститься до уровня общения с устройством на их языке.</p><p>Вот такой скрипт получился. Если его внимательно посмотреть, то можно там увидеть на какой статус можно проверить устройство.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Воспроизведение на телеке с проверкой его статуса - PascalScript</div><div class="fancy_spoiler"><div class="codebox"><pre><code>///////////////////////////////////////////////////////////////////////////////
// Отправка AVTransport команды устройству
Function AVTransport(sServerAddr, sServiceType, sControlUrl, sCmd: String): String;
Var
  nPort: Integer = 80; sData, sVal, sHeaders, sPayload, sRetHeaders: String;
Begin
  If (HmsRegExMatch2(&#039;^(.*?):(\d+)&#039;, sServerAddr, sServerAddr, sVal)) Then
    nPort := StrToInt(sVal);
  
  sHeaders := &#039;/\r\nUser-Agent: SEC_HHP_Flipps/1.0&#039;#10#13+
              Format(&#039;SOAPACTION: &quot;%s#%s&quot;&#039;, [sServiceType, sCmd]);
  
  sPayload := &#039;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&#039;#10#13+
              &#039;&lt;s:Envelope s:encodingStyle=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:s=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;&#039;#10#13+
              &#039;  &lt;s:Body&gt;&#039;#10#13+
              &#039;      &lt;u:&#039; + sCmd + &#039; xmlns:u=&quot;&#039; + sServiceType + &#039;&quot;&gt;&#039;#10#13+
              &#039;         &lt;InstanceID&gt;0&lt;/InstanceID&gt;&#039;#10#13+
              &#039;      &lt;/u:&#039; + sCmd + &#039;&gt;&#039;#10#13+
              &#039;   &lt;/s:Body&gt;&#039;#10#13+
              &#039;&lt;/s:Envelope&gt;&#039;;
  sData := HmsSendRequestEx(sServerAddr, sControlUrl, &#039;POST&#039;, &#039;text/xml; charset=&quot;utf-8&quot;&#039;, 
                            sHeaders, sPayload, nPort, 0, sRetHeaders, true);
  Result := sRetHeaders + sData;
End;

///////////////////////////////////////////////////////////////////////////////
// Получение статуса устройства по его IP
Function GetDeviceStatus(sIP: String): String;
Var
  sStatus, sDMRurl, sData, sServiceType, sCtlUrl: String;
  DEVLIST: THmsScriptUPnPDeviceList; DEVICE: THmsScriptUPnPDevice;
  i, n: Integer;
Begin
  sStatus := &#039;UNKNOWN&#039;;
  DEVLIST := THmsScriptUPnPDeviceList.Create;
  Try
    For i := 0 To DEVLIST.Count-1 Do Begin
      DEVICE := DEVLIST[0];
      If (DEVICE.IpAddress &lt;&gt; sIP) Then Continue;
      sDMRurl := DEVICE.Properties[1];
      sData   := HmsRemoveLineBreaks(HmsDownloadURL(sDMRurl));
      HmsRegExMatch2(&#039;&lt;serviceType&gt;([^&lt;]+AVTransport.*?)&lt;/serviceType&gt;.*?&lt;controlURL&gt;(.*?)&lt;/controlURL&gt;&#039;, sData, sServiceType, sCtlUrl);
      
      sData := AVTransport(DEVICE.HttpServerAddr, sServiceType, sCtlUrl, &#039;GetTransportInfo&#039;);
      HmsRegExMatch(&#039;&lt;CurrentTransportState&gt;(.*?)&lt;/CurrentTransportState&gt;&#039;, sData, sStatus);
      break;
    End;
    
  Finally
    DEVLIST.Free;
  End;
  //Status - STOPPED|PAUSED_PLAYBACK|PAUSED_RECORDING|PLAYING|RECORDING|TRANSITIONING|NO_MEDIA_PRESENT
  Result := sStatus;
End;

///////////////////////////////////////////////////////////////////////////////
// Запуск воспроизведения, если статус устройства не &#039;PLAYING&#039;
Procedure PlayIfNotPlaying(sDeviceIP, sFolderID, sFilePath: String);
Var
  Status: String; MediaItem: THmsScriptMediaItem;
Begin
  Status := GetDeviceStatus(sDeviceIP);
  If Status = &#039;PLAYING&#039; Then Exit;
  
  MediaItem := HmsFindMediaFolder(sFolderID, sFilePath);
  If MediaItem &lt;&gt; nil Then
    HmsPlayToDevice(MediaItem, sDeviceIP)
  Else
    HmsLogMessage(2, &quot;Не найден элемент базы данных, который нужно воспроизвести.&quot;);
End;

///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я   П Р О Ц Е Д У Р А                     //
///////////////////////////////////////////////////////////////////////////////
Begin

  PlayIfNotPlaying(&#039;192.168.1.107&#039;, mfVideoInternetTelevisionItemID, &#039;RTMP_server&#039;);  
  
End.</code></pre></div></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Воспроизведение на телеке с проверкой его статуса - С++Script</div><div class="fancy_spoiler"><div class="codebox"><pre><code>///////////////////////////////////////////////////////////////////////////////
// Отправка AVTransport команды устройству
string AVTransport(string sServerAddr, string sServiceType, string sControlUrl, string sCmd) {
  int nPort = 80; string sData, sVal, sHeaders, sPayload, sRetHeaders;
  
  if (HmsRegExMatch2(&#039;^(.*?):(\\d+)&#039;, sServerAddr, sServerAddr, sVal)) 
    nPort = StrToInt(sVal);
  
  sHeaders = &#039;/\r\nUser-Agent: SEC_HHP_Flipps/1.0\r\n&#039;+
             Format(&#039;SOAPACTION: &quot;%s#%s&quot;&#039;, [sServiceType, sCmd]);
  
  sPayload = &#039;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&#039;+
             &#039;&lt;s:Envelope s:encodingStyle=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot; xmlns:s=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;\r\n&#039;+
             &#039;  &lt;s:Body&gt;\r\n&#039;+
             &#039;      &lt;u:&#039; + sCmd + &#039; xmlns:u=&quot;&#039; + sServiceType + &#039;&quot;&gt;\r\n&#039;+
             &#039;         &lt;InstanceID&gt;0&lt;/InstanceID&gt;\r\n&#039;+
             &#039;      &lt;/u:&#039; + sCmd + &#039;&gt;\r\n&#039;+
             &#039;   &lt;/s:Body&gt;\r\n&#039;+
             &#039;&lt;/s:Envelope&gt;\r\n&#039;;
  sData = HmsSendRequestEx(sServerAddr, sControlUrl, &#039;POST&#039;, &#039;text/xml; charset=&quot;utf-8&quot;&#039;, 
                           sHeaders, sPayload, nPort, 0, sRetHeaders, true);
  return sRetHeaders + sData;
}

///////////////////////////////////////////////////////////////////////////////
// Получение статуса устройства по его IP
string GetDeviceStatus(string sIP) {
  string sStatus, sDMRurl, sData, sServiceType, sCtlUrl;
  THmsScriptUPnPDeviceList DEVLIST; THmsScriptUPnPDevice DEVICE;
  int i, n;
  sStatus = &#039;UNKNOWN&#039;;
  DEVLIST = THmsScriptUPnPDeviceList.Create();
  try {
    for (i=0; i &lt; DEVLIST.Count; i++) {
      DEVICE = DEVLIST[0];
      if (DEVICE.IpAddress != sIP) continue;
      sDMRurl = DEVICE.Properties[1];
      sData   = HmsRemoveLineBreaks(HmsDownloadURL(sDMRurl));
      HmsRegExMatch2(&#039;&lt;serviceType&gt;([^&lt;]+AVTransport.*?)&lt;/serviceType&gt;.*?&lt;controlURL&gt;(.*?)&lt;/controlURL&gt;&#039;, sData, sServiceType, sCtlUrl);
      
      sData = AVTransport(DEVICE.HttpServerAddr, sServiceType, sCtlUrl, &#039;GetTransportInfo&#039;);
      HmsRegExMatch(&#039;&lt;CurrentTransportState&gt;(.*?)&lt;/CurrentTransportState&gt;&#039;, sData, sStatus);
      break;
    }
    
  } finally { DEVLIST.Free; }
  //Status - STOPPED|PAUSED_PLAYBACK|PAUSED_RECORDING|PLAYING|RECORDING|TRANSITIONING|NO_MEDIA_PRESENT
  return sStatus;
}

///////////////////////////////////////////////////////////////////////////////
// Запуск воспроизведения, если статус устройства не &#039;PLAYING&#039;
void PlayIfNotPlaying(string sDeviceIP, string sFolderID, string sFilePath) {
  string status; THmsScriptMediaItem MediaItem;
  
  status = GetDeviceStatus(sDeviceIP);
  if (status == &#039;PLAYING&#039;) exit;

  MediaItem = HmsFindMediaFolder(sFolderID, sFilePath);
  if (MediaItem != nil)
    HmsPlayToDevice(MediaItem, sDeviceIP);
  else
    HmsLogMessage(2, &quot;Не найден элемент базы данных, который нужно воспроизвести.&quot;);
}

///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я   П Р О Ц Е Д У Р А                     //
///////////////////////////////////////////////////////////////////////////////
{
  
  PlayIfNotPlaying(&#039;192.168.1.107&#039;, mfVideoInternetTelevisionItemID, &#039;RTMP_server&#039;);  
  
}</code></pre></div></div></div><p>Проверьте.</p>]]></description>
			<author><![CDATA[null@example.com (WendyH)]]></author>
			<pubDate>Fri, 24 Jun 2016 22:04:59 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=5262#p5262</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=5253#p5253</link>
			<description><![CDATA[<p>Добрый день. <br />Используя пример выше, удалось написать скрипт для своих нужд.<br /></p><div class="codebox"><pre><code>var
  MediaItem: THmsScriptMediaItem;
begin
   MediaItem := HmsFindMediaFolder(mfVideoInternetTelevisionItemID, &#039;RTMP_server&#039;);
  if (MediaItem &lt;&gt; nil)  then
    HmsPlayToDevice(MediaItem, &#039;192.168.1.107&#039;)  
end.</code></pre></div><p>Скрипт работает, в &quot;Устойство воспроизведения-&gt;Управление&quot; виден текущий статус PLAYING.<br />Вопрос такой, можно ли модернизировать скрипт так , что бы он исполнялся только в случае, если статус другой (not PLAYING)<br />Тогда можно в расписании выставить правило на исполнение, скажем, раз в минуту, и получим автоматическое пере подключение к телевизору.<br />Может быть есть другое решение? <br />Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (samvol79)]]></author>
			<pubDate>Fri, 24 Jun 2016 09:41:23 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=5253#p5253</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=1124#p1124</link>
			<description><![CDATA[<p>Спасибо! Отличный вариант! В добавок сделал батник <br /></p><div class="codebox"><pre><code>taskkill /f /im hms.exe</code></pre></div><p>и поставил его в планировщик.<br />Дезактивировал HMS как службу windows и поставил галку что бы запускался сервер вместе с программой, ну и добавил в планировщик на запуск.</p>]]></description>
			<author><![CDATA[null@example.com (morfius8)]]></author>
			<pubDate>Sun, 17 May 2015 18:16:07 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=1124#p1124</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=1122#p1122</link>
			<description><![CDATA[<p>Функции останова устройства и сервера не нашёл.<br />Есть мысль как остановить устройство: сделать короткое видео-заглушку. Которое бы просто показывала надпись, типа &quot;Конец&quot;. И сделать в 2 часа дня ещё один запуск скрипта по расписанию, который бы запускал это видео-заглушку функцией HmsPlayToDevice, только с третьим параметром false (чтобы в плейлист не добавлял).<br /></p><div class="codebox"><pre><code>HmsPlayToDevice(MediaItem.ChildItems[0], &#039;192.168.21.35&#039;, false)</code></pre></div><p>Это должно прервать показ предыдущего вещания, показать это видео и остановиться. Теоретически.</p><p>А вот с выключением медиа-сервера не знаю. В информации о клиентском устройстве можно настроить Рабочее время, если нужно чтобы телек имел доступ только в какой-то период дня.</p>]]></description>
			<author><![CDATA[null@example.com (WendyH)]]></author>
			<pubDate>Sun, 17 May 2015 15:22:53 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=1122#p1122</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=1120#p1120</link>
			<description><![CDATA[<p><strong>morfius8</strong><br />Ещё учтите, что нужно с выключением и включением сервера, согласовать включение и выключение телека. А то получится как у меня, когда я запустив видео с подкаста, включил через папку сервис в HMS, автовыключение компа через час, и уснул. А ночью, когда сервер отрубился, телек автоматом переключился на показ эфирных каналов, и поскольку громкость была прибавлена, то он заорал посреди ночи, что я чуть с кровати не упал.</p>]]></description>
			<author><![CDATA[null@example.com (Leshiy71)]]></author>
			<pubDate>Sun, 17 May 2015 12:35:36 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=1120#p1120</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=1119#p1119</link>
			<description><![CDATA[<p>Большое человеческое спасибо, действительно не указал поле &quot;путь&quot;. После указания все заработало. <br />Единственное мне нужно, что бы воспроизведение на устройстве останавливалось в 2 часа дня, а затем и сам сервер останавливался и в 9 утра запускался. Попробовал это сделать через службы windows, но тогда при запуске службы не появляется устройство drm в списке. А как это реализовать обработкой ума не приложу?</p>]]></description>
			<author><![CDATA[null@example.com (morfius8)]]></author>
			<pubDate>Sun, 17 May 2015 12:10:59 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=1119#p1119</guid>
		</item>
		<item>
			<title><![CDATA[Re: DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=1107#p1107</link>
			<description><![CDATA[<p>В окне редактирования скрипта можете нажать F8 и по шагам выполнять программу. Остановившись после<br /></p><div class="codebox"><pre><code>MediaItem := HmsFindMediaFolder(mfVideoCollectionsItemID, &#039;DNA&#039;);</code></pre></div><p>скопировать и нажав Ctrl+F7 вставить в выражение название переменной - MediaItem. Посмотрите, значение должно быть отлично от нуля. Если оно равно 0, то значит он не нашёл папку со значением пути &quot;DNA&quot; в папке &quot;Коллекции&quot;&nbsp; (mfVideoCollectionsItemID).<br />Обратите внимание, что DNA - это должно быть не название (хотя и может быть им тоже), а значение поля &quot;Путь&quot;.<br />Проверил у себя сейчас, только не запуск видео из коллекции, а запуск видео из папки в подкасте &quot;Youtube &amp; Vimeo&quot; (предварительно задав в поле &quot;Путь&quot; папок значения &quot;YoutubeAndVimeo&quot; и в нём папки с названием &quot;КВН 2015&quot; - &quot;kvn&quot;, а также обновив подкаст, чтобы в папке &quot;квн&quot; были ссылки на видео).<br /></p><div class="codebox"><pre><code>  MediaItem := HmsFindMediaFolder(mfVideoItemsFolderID, &#039;Podcasts\YoutubeAndVimeo\kvn&#039;);
  if (MediaItem &lt;&gt; nil) and MediaItem.HasChildItems then
    HmsPlayToDevice(MediaItem.ChildItems[0], &#039;192.168.1.20&#039;)</code></pre></div><p>Запустил на телеке первый файл в коллекции.</p><p>А скрипт где вводили, в списке обработок? И как запускали?</p><p>Скрипт можно легко усовершенствовать, например для поиска и во вложенных папках и чего угодно. Могу помочь.</p>]]></description>
			<author><![CDATA[null@example.com (WendyH)]]></author>
			<pubDate>Fri, 15 May 2015 19:46:09 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=1107#p1107</guid>
		</item>
		<item>
			<title><![CDATA[DLNA-будильник]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=1104#p1104</link>
			<description><![CDATA[<p>Здравствуйте! Прошу прощения если написал не в эту тему!<br />На официальном форуме есть следующий скрипт для запуска на телеке по расписанию медиа-ресурса<br /></p><div class="codebox"><pre><code>var
  MediaItem: THmsScriptMediaItem;
begin
  MediaItem := HmsFindMediaFolder(mfAudioInternetRadioItemID, &#039;Electronica\SkyHits Radio&#039;);
  if (MediaItem &lt;&gt; nil) and MediaItem.HasChildItems then
    HmsPlayToDevice(MediaItem.ChildItems[0], &#039;Название, IP-адрес или MAC-адрес устройства воспроизведения&#039;) 
end.</code></pre></div><p>Я его подредактировал по себя что-бы запускал коллекцию видео<br /></p><div class="codebox"><pre><code>var
MediaItem: THmsScriptMediaItem;
begin
MediaItem := HmsFindMediaFolder(mfVideoCollectionsItemID, &#039;DNA&#039;);
if (MediaItem &lt;&gt; nil) and MediaItem.HasChildItems then
HmsPlayToDevice(MediaItem.ChildItems[0], &#039;192.168.21.35&#039;)
end.</code></pre></div><p>в коллекции всего один файл.<br />Но проблема в том что при выполнение скрипта ничего не происходит, в форме управления DRM файл в таблицу воспроизведения не добавляется, соответственно телевизор ничего на воспроизведение не запускает.<br />Помогите пожалуйста решить проблему?<br />Спасибо</p>]]></description>
			<author><![CDATA[null@example.com (morfius8)]]></author>
			<pubDate>Fri, 15 May 2015 10:53:14 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=1104#p1104</guid>
		</item>
	</channel>
</rss>
