1

Тема: Настройка HTTP ответов в HMS

Автор HMS добавил в описание проги (http://homemediaserver.ru/forum/viewtop … 533#p20922), что можно например  изменять заголовки HTTP-ответов сервера. Интересует технология Cors (https://ru.wikipedia.org/wiki/Cross-ori … ce_sharing) для добавления в начало заголовка ответа Access-Control-Allow-Origin: * , но у меня не хватает знаний программирования, чего там добавлять в дополнительных настройках устройств в HMS в обработке событий.

В практическом применении нужно для навигации по медиатеке HMS приложением в телеке Fork Player, которое работает как браузер, но из-за того что оно вынесено на отдельный DNS, происходит проблема с навигацией по HMS. Встроенный в телек браузер нормально заходит в HMS и запускает видео по адресу http://192.168.0.196:45397/.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

2

Re: Настройка HTTP ответов в HMS

Я, может быть, не до конца понял что именно и как нужно. Но, чтобы добавить HTTP заголовок для конкретного устройства, достаточно в настройках этого устройства в скрипт

+ Обработка HTTP-запросов - После

https://hms.lostcut.net/img/help/modifyhttpheaders.png

добавить мега скрипт:

Begin
  HttpResponse.MessageHeader.AddField('Access-Control-Allow-Origin', '*');
End.

и HMS в ответах при запросах от этого устройства будет добавлять HTTP заголовок "Access-Control-Allow-Origin: *". Как-то так.

Sony Bravia KDL-32CX523

3

Re: Настройка HTTP ответов в HMS

Благодарю за помощь !
Наконец то удалось удостовериться, что эта штука точно работает.
А то в Fork Playere всё писало об ошибке - то ошибка обработки 404, то ошибка парсинга, то ошибка разбора плейлиста и т.д., а всё из-за того что он не умеет делать веб-навигацию по папкам, а понимает только M3U плейлисты, а HMS формирует плейлист только когда через веб-навигацию добрался до самих файлов.
Короче, когда на сайт Fork Playera добавил ссылку на внешний самообновляемый плейлист, которую формирует HMS у меня при веб-навигации с компа на каналы в папке избранное подкаста Тучка ТВ (http://192.168.0.196:45397/MediaServer/ … leext=.m3u), то просто так она не хотела восприниматься, а когда HMS в ответах стал для моего ТВ добавлять HTTP заголовок "Access-Control-Allow-Origin: *, то всё стало чётко и заработало.
*THUMBSUP*

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

4

Re: Настройка HTTP ответов в HMS

Само добавление этого заголовка к ответам от телека работает идеально : начинает работать навигация по HMS через Fork Player и перемотка при просмотре с инета без транскода. Насколько я понял, это что телек начинает общаться с сервером где фильм - напрямую без HMS.
Только вот при каждом запуске HMS внизу в журнале сообщений постоянно высвечивается ошибка
Exception : Ole error 80020009: Run: Ошибка
Что бы это могло означать ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

5

Re: Настройка HTTP ответов в HMS

Leshiy71 пишет:

Exception : Ole error 80020009: Run: Ошибка
Что бы это могло означать ?

Посмотрите "Настройки" -> "События" -> "После загрузки программы" не стоит там скрипт запуска HMSEditor? Может осталось от старого, когда он ещё аддоном небыл.
Тот скрипт пытается запустить HMSEditor.exe, которого уже нет наверно в том месте.

Sony Bravia KDL-32CX523

6

Re: Настройка HTTP ответов в HMS

Так точно, после удаления этой команды ошибка пропала.
*BYE*

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

7

Re: Настройка HTTP ответов в HMS

WendyH
Можно ли при первом запросе от телека заставить его продублировать самый первый запрос ?
Дело в том, что при просмотре Торрент ТВ без транскода по DLNA, выскакивает одно окно AcePlayera и после получения ссылки начинается трансляция оригинального потока на ТВ. А вот при запуске Торрент ТВ через ForkPlayer, который на внешнем DNS, то выскакиыает сразу 3 окна AcePlayera и глухо. Может если добавить вначале левый запрос от телека, то потом телек и HMS соединятся напрямую, и возможно показ без транскода через Fork тоже начнёт нормально работать.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

8

Re: Настройка HTTP ответов в HMS

Leshiy71, пока не понятно. При запросе фильма от телека, продублировать какой запрос? От кого к кому?

Sony Bravia KDL-32CX523

9

Re: Настройка HTTP ответов в HMS

Вобщем задача какая : сначала телек должен получить ответ от HMS с заголовком, который у нас в шапке темы, чтобы телек и HMS начали общаться напрямую, а затем я хотел чтобы он заново делал тот же самый запрос, но немного поразмыслив, решил что этот вариант не прокатит, т.к. одно окно AcePlayera уже будет запущено и будет постоянно висеть.
Другой вариант надо попробовать : это чтобы Ace Player игнорировал запросы со стороннего DNS сервера, а отвечал только на запрос от конкретного телека (не HMS, а именно запуск AcePlayera). Чего тут можно замутить ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

10 (2016.03.09 21:44:14 отредактировано WendyH)

Re: Настройка HTTP ответов в HMS

Т.к. мне никак не проверить как работает этот ФоркПлеер, то вся надежда на вас.
Не могли бы вы сделать следующую штуку.
Установить Charles. Запустить его. И записать две сесии: одну при нормальной работе телека через HMS (сохранить сессию в файл) и потом отдельно записать сессию с работой через Форк (и также сохранить её на диск файлом). Прикрепить сохранённые сесии к сообщению, чтобы я посмотрел как идут, откуда и чего там запросы к вашему компу, где стоит AcePlayer.
(Осторожно, при этом желательно ничего не делать лишнего другого, а то могут и пароли на незащищённые сайты в сессию в открытом виде попасть).

А то я, чувствую, ничего со слов не пойму, как там всё работает.

P.S.: А, блин, похоже, что чтобы сессия общения телека попала в Чарлис, нужно ещё в телеке сделать настройку сети с использованием прокси, где в качестве адреса прокси прописать ИП компа, где запущен Charles и порт 8888.

Sony Bravia KDL-32CX523

11

Re: Настройка HTTP ответов в HMS

Вот сохранил без прокси. Вроде видно, что через Fork идёт тройной запрос торрента. Запускал по одному каналу в каждой сессии.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

12

Re: Настройка HTTP ответов в HMS

P.S.: А, блин, похоже, что чтобы сессия общения телека попала в Чарлис, нужно ещё в телеке сделать настройку сети с использованием прокси, где в качестве адреса прокси прописать ИП компа, где запущен Charles и порт 8888.

Не хочет телек подключаться через IP-адрес компа, пишет что к этому адресу подключены другие устройства, пробуйте другой адрес.
Вводил IP - 192.168.0.196 (комп), маска подсети - 255.255.0.0, шлюз - 8.8.8.8.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

13

Re: Настройка HTTP ответов в HMS

Leshiy71, не, это вы вводили, похоже, IP телевизора. Там где ввод IP, маска подсети, шлюз, dns - это всё настройки конкретно адреса вашего телевизора. Там где-то рядом или после этого должен быть пункт "Использовать прокси", и если его включить, то можно ввести IP адрес прокси и порт (возможно порт можно указывать через двоеточие после IP). И там нет шлюза. Но я не знаю как там в вашем телевизоре, поэтому не могу точно сказать как это должно выглядеть. Искать слово "Прокси" нужно.

Sony Bravia KDL-32CX523

14

Re: Настройка HTTP ответов в HMS

Вобщем, нету в LG подключения через прокси, пробовал и в строчку шлюза вводить IP компа, не видит Чарли Чаплин мой телек, поскольку порт нет возможности выставлять.
Короче, выложу ещё сессии : запуск Торрент ТВ с Форка через транскод AceStream входной поток, где торрент запрашивается только 1 раз, и запуск через Форк с Youtube оригинальной ссылки, а также оригинального потока, где ссылка запрашивается вообще раз 5.

Если не будет соображений почему через Форк ссылка на торрент запрашивается 3 раза, то можно завязывать с этой ерундой.
Если здесь тоже будут высвечиваться мои данные с Youtube, то можете вложения сразу удалить.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

15 (2016.03.18 19:01:20 отредактировано alexkdpu)

Re: Настройка HTTP ответов в HMS

Leshiy71 пишет:

запрашивается 3 раза

заголовки запроса одинаковые? возможно там идет запрос с разным Range
у меня  было подобное то выставил в настройках хмс длину файла -1

16

Re: Настройка HTTP ответов в HMS

alexkdpu пишет:
Leshiy71 пишет:

запрашивается 3 раза

заголовки запроса одинаковые? возможно там идет запрос с разным Range
у меня  было подобное то выставил в настройках хмс длину файла -1

Вообще, при показе без транскода HMS должен гнать поток с AcePlayera на ТВ ни как его не изменяя. Если Вы имеете ввиду настройку - максимальный размер транскодированного файла -1, то она влияет только при просмотре через транскод. Кстати, если у вас выставлено на торрент подкасты как на скрине на вашем форуме, то будет всё равно идти через транскод. Тоже вначале не мог понять, почему оригинальная ссылка или оригинальный поток на одних подкастах срабатывает, а на других нет. Оказывается там небольшой косяк в HMS, надо обязательно стереть профиль транскода нажав красный крестик, иначе так и будет идти через транскод.

+ открыть спойлер

http://s014.radikal.ru/i327/1603/93/cee1db8009ec.jpg

А по поводу Range, то я не особо разбираюсь в этих делах, но ради интереса запустил две сессии в Charles, где в одной запустил канал в Торрент ТВ без транскода через DLNA, а в другой запустил этот же канал через ForkPlayer, и стал их сравнивать. Как на мой взгляд, то ForkPlayer просто делает дополнительные запросы на сайт, пытаясь выудить ещё информацию, из-за чего и происходит косяк с трёхкратным запуском AcePlayera. Если бы можно было добавить в скрипты на сервере запрет лишних запросов для всех Торрент сайтов, то я думаю что всё бы заработало, так же как и по DLNA.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

17

Re: Настройка HTTP ответов в HMS

Вопрос к WendyH :
В Fork Playere Торреннт ТВ подкасты не хотят работать без транскода из-за троекратного запуска AceStream.
Автор Forka где то писал, что там из особенностей то что идет сразу три запроса к файлу, сначала проверка заголовков, потом скачивает с конца файла медиаинфо и потом уже с Range:0 запрос файла.
Можно ли задать условие, чтобы для этих подкастов первые два запроса игнорировались ?
Думаю тогда должен без транскода оригинальный поток начать показывать.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

18

Re: Настройка HTTP ответов в HMS

Leshiy71, дело в том, что у меня телек не поддерживает форк, поэтому я как бы не знаю о чем речь. Где именно обращение к файлу происходит как это всё работает - мне пока не понятно.

Sony Bravia KDL-32CX523

19

Re: Настройка HTTP ответов в HMS

WendyH пишет:

Leshiy71, дело в том, что у меня телек не поддерживает форк, поэтому я как бы не знаю о чем речь. Где именно обращение к файлу происходит как это всё работает - мне пока не понятно.

Да, жаль что нет такой возможности.
Если чисто в теории, то на сайте http://forkplayer.tv/ в первом посте описан принцип действия, и даже можно открыть схему как это всё выглядит, но только в общих чертах. Какие конкретно на сервере скрипты делают запросы - инфы нету, но главное что "При выборе файла он напрямую транслируется с выбранного сайта источника на ТВ".
Думал что в HMS в HTTP ответах можно добавить условие, для блокировки лишних запросов к Торрент подкастам, но похоже что здесь надо конкретно вычислять сниффером, чего там запрашивается.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

20

Re: Настройка HTTP ответов в HMS

WendyH
Будет время - посмотри как в новых версиях HMS добавить в начало заголовка ответ Access-Control-Allow-Origin: * чтобы не было конфликта с навигацией по HMS. Автор HMS сделал что и без неё сейчас Fork Player заходит в HMS через WEB-навигацию, но без ответа Access-Control-Allow-Origin: * не работает перемотка при просмотре без транскода, ни через Fork ни по DLNA.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

21

Re: Настройка HTTP ответов в HMS

Leshiy71 пишет:

WendyH
Будет время - посмотри как в новых версиях HMS добавить в начало заголовка ответ Access-Control-Allow-Origin: * чтобы не было конфликта с навигацией по HMS. Автор HMS сделал что и без неё сейчас Fork Player заходит в HMS через WEB-навигацию, но без ответа Access-Control-Allow-Origin: * не работает перемотка при просмотре без транскода, ни через Fork ни по DLNA.

Посмотрел, поэкспериментировал, но может быть не совсем до конца понял все приколы.
Добавление заголовка "Access-Control-Allow-Origin: *" вызывает exception, т.е. ошибку. Однако если добавить любой другой заголовок - нет.
Дело в том, что в ответе HMS уже содержится этот заголовок!

Если туда временно вставить такой скрипт (выставить язык C++Script):

{
  HmsLogMessage(1, "---------- ЗАГОЛОВКИ ОТВЕТА СЕРВЕРА ----------- ");
  for (int i=0; i < HttpResponse.MessageHeader.Count; i++) {
    HmsLogMessage(1, Str(i)+") "+ HttpResponse.MessageHeader.Fields[i].Name+": "+HttpResponse.MessageHeader.Fields[i].Value);
  }
}

Перезапустить сервер, то можно в журнале сообщений увидеть все заголовки, которые уже установлены.
И там будет уже этот "Access-Control-Allow-Origin: *".

Так что перемотка, теоретически, в новых версиях может не работать по какой-то другой причине (у меня в этом плане ничего не изменилось, всё работает как работало).

Кстати, после установки новой версии HMS, желательно зайти в профили транскодирования и на стандартных понажимать кнопку "Восстановить", чтобы он встроенные профили привёл к виду из дистрибутива. Ибо они для новой версии были доработаны.

Sony Bravia KDL-32CX523

22

Re: Настройка HTTP ответов в HMS

Да, попробовал с этим скриптом посмотреть журнал на версии HMS 2.27 - там куча заголовков для HTTP среди которых и "Access-Control-Allow-Origin: *".
Попробовал с этим скриптом на версии HMS 2.25 посмотреть в журнале HTTP ответы - так там вроде и нету множества других заголовков.
Насколько я понял смысл получения в ответе заголовка "Access-Control-Allow-Origin: *" - это что ТВ получает разрешение на связь телека и сервера напрямую помимо HMS, и при просмотре без транскода начинает работать перемотка на версии HMS 2.25, а вот на новых версиях HMS не срабатывает.

Печально, но придётся пользоваться HMS 2.25 и про дальнейшие обновления проги забыть.
*DONT_KNOW*

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

23

Re: Настройка HTTP ответов в HMS

Leshiy71 пишет:

Насколько я понял смысл получения в ответе заголовка "Access-Control-Allow-Origin: *" - это что ТВ получает разрешение на связь телека и сервера напрямую помимо HMS

Практически верно. Этот заголовок разрешает браузерам получать контент с других доменов (адресов), отличных от первоначально запрашиванмого. Кросс-домннные запросы.
Это сделано для безопасности, от внедрения стороннего кода. И её поддержка зависит от клиента (браузера или устройства).
Добавление этих заголовков в программу это хорошо, но поломалось что-то где-то ещё, в другом месте.
Расследование не закрыто.

Sony Bravia KDL-32CX523

24

Re: Настройка HTTP ответов в HMS

WendyH пишет:

Практически верно. Этот заголовок разрешает браузерам получать контент с других доменов (адресов), отличных от первоначально запрашиванмого. Кросс-домннные запросы.
Это сделано для безопасности, от внедрения стороннего кода. И её поддержка зависит от клиента (браузера или устройства).
Добавление этих заголовков в программу это хорошо, но поломалось что-то где-то ещё, в другом месте.
Расследование не закрыто.

Возможно HMS автоматом добавляет этот заголовок не ко всем HTTP запросам и перемотка не срабатывает.
Чтобы не было ошибки с навигацией по HMS с нашим скриптом - попробовать бы его допилить, чтобы он добавлял "Access-Control-Allow-Origin: *" только для HTTP ответов в которых этот заголовок отсутствует.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

25

Re: Настройка HTTP ответов в HMS

Leshiy71 пишет:

Чтобы не было ошибки с навигацией по HMS с нашим скриптом - попробовать бы его допилить, чтобы он добавлял "Access-Control-Allow-Origin: *" только для HTTP ответов в которых этот заголовок отсутствует.

Тогда это вот такой скрипт (Язык C++Script):

{
  bool bAllowOriginExist=false; int i; THmsMessageHeaderField FIELD;
  for (i=0; i < HttpResponse.MessageHeader.Count; i++) {
    FIELD = HttpResponse.MessageHeader.Fields[i];
    if (FIELD.Name=="Access-Control-Allow-Origin") {
      if (FIELD.Value!="*") FIELD.Value = "*";
      bAllowOriginExist = true;
      break;
    }
  }
  if (!bAllowOriginExist) {
    HttpResponse.MessageHeader.AddField("Access-Control-Allow-Origin", "*");
    HmsLogMessage(1, "---------- ЗАГОЛОВОК Access-Control-Allow-Origin: * ДОБАВЛЕН В ОТВЕТ! ----------- ");
  }
}

Если в логах на новой HMS когда-нибудь увидите сообщения, что заголовок добавлен в ответ, то значит такая ситуация случилась. Если нет, то значит он уже всегда присутствует там (я так подозреваю).

Sony Bravia KDL-32CX523

26

Re: Настройка HTTP ответов в HMS

Проверил, потестил и получается следующее :
Во первых всё правильно я предположил а WendyH реализовал в скрипте. Всё заработало как должно : при каждом запуске видео и при каждой перемотке добавляется заголовок  "Access-Control-Allow-Origin: *"  и всё работает за одним косяком - при Web-навигации через Fork перестало срабатывать обновление подкастов, не создаётся ссылка M3U, хотя при Web-навигации с компа всё срабатывает. Подумал что из-за нового Remote Forka, ан нет, при откате HMS на версию 2.25 подкасты обновляются.

Ну а во вторых, на версии HMS 2.28 с обновлённым интерфейсом, у меня стал телек по DLNA нормально находить HMS и с первоначальным скриптом добавления этого заголовка, но новая проблема с обновлением подкастов через Fork осталась.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!