1 (2016.03.06 16:22:01 отредактировано Oompaloomp)

Тема: Получение тэга для проигрываемого радио.

Доброго времени суток, уважаемые коллеги
появилась такая идея, существует ли возможность получать тэги с именем исполнителя и названием композиции для проигрываемого радио и выводом информации на устройство воспроизведения.
Ведь существуют ресурсы которые предоставляют такую возможность для многих радиостанций:

+ Море Радио плейлист для Пионер ФМ

Некоторые радиостанции передают такую обновляемую информацию прямо в ссылке на радио поток.

LG 42LA644V/Philips 32PFL3605/60

2

Re: Получение тэга для проигрываемого радио.

Hms умеет брать теги, только если они прописанны в самом потоке, а многие добавляют их в заголовок.
Вот что пишет автор программы www.homemediaserver.ru/forum/viewtopic.php?f=15&t=487

WD TV LS+Sony KDLS5600/Samsung UEF5400/Sony PS 3/Yamaha RX-V379/hms 2.33
Кладовая HMS (список полезных ссылок и инструкций)
https://hms.lostcut.net/misc.php?action=pun_attachment&item=2914&download=0
Временно отсутствую

3

Re: Получение тэга для проигрываемого радио.

Big Dog пишет:

Hms умеет брать теги, только если они прописанны в самом потоке, а многие добавляют их в заголовок.
Вот что пишет автор программы www.homemediaserver.ru/forum/viewtopic.php?f=15&t=487

Понятно, спасибо

LG 42LA644V/Philips 32PFL3605/60

4

Re: Получение тэга для проигрываемого радио.

Big Dog пишет:

Hms умеет брать теги, только если они прописанны в самом потоке, а многие добавляют их в заголовок.
Вот что пишет автор программы www.homemediaserver.ru/forum/viewtopic.php?f=15&t=487

А это как считается?

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=703

Прикреплённые файлы сообщения

2016-03-13_161137.jpg 224.84 kb, скачивалось 181 раз, начиная с 2016.03.13

Спасибо сказали: Big Dog1

5 (2016.03.13 16:33:44 отредактировано Big Dog)

Re: Получение тэга для проигрываемого радио.

d1mas пишет:
Big Dog пишет:

Hms умеет брать теги, только если они прописанны в самом потоке, а многие добавляют их в заголовок.
Вот что пишет автор программы www.homemediaserver.ru/forum/viewtopic.php?f=15&t=487

А это как считается?

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=703

Это были слова автора программы
И к тому же вы привели пример из подкаста, а мы обсуждали прямой поток

WD TV LS+Sony KDLS5600/Samsung UEF5400/Sony PS 3/Yamaha RX-V379/hms 2.33
Кладовая HMS (список полезных ссылок и инструкций)
https://hms.lostcut.net/misc.php?action=pun_attachment&item=2914&download=0
Временно отсутствую

6

Re: Получение тэга для проигрываемого радио.

Big Dog пишет:
d1mas пишет:
Big Dog пишет:

Hms умеет брать теги, только если они прописанны в самом потоке, а многие добавляют их в заголовок.
Вот что пишет автор программы www.homemediaserver.ru/forum/viewtopic.php?f=15&t=487

А это как считается?

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=703

Это были слова автора программы
И к тому же вы привели пример из подкаста, а мы обсуждали прямой поток

Ок. А то, что я показал, можно подхватывать в HMS?

7

Re: Получение тэга для проигрываемого радио.

Странно на WD через подкаст теги есть, а вот через Samsu тегов нет

WD TV LS+Sony KDLS5600/Samsung UEF5400/Sony PS 3/Yamaha RX-V379/hms 2.33
Кладовая HMS (список полезных ссылок и инструкций)
https://hms.lostcut.net/misc.php?action=pun_attachment&item=2914&download=0
Временно отсутствую

8

Re: Получение тэга для проигрываемого радио.

Big Dog пишет:

Странно на WD через подкаст теги есть, а вот через Samsu тегов нет

А WDшка, видимо поток напрямую цепляет. Либо эти теги умеет из потока дергать самостоятельно.

Как бы их научиться менее умным устройствам отдавать...

9

Re: Получение тэга для проигрываемого радио.

Совершенно верно WD умеет напрямую цепляться к потокам плейлистов
Есть такая штука называется BassPlayer, там тоже задавались таким вопросом, как получать теги интернет радио и приводили код скрипта (с++), может чем поможет

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

public class BassPlayer
    {
        private int _handleSynchronization;
        //В методе Play() будет использоваться: _handleSynchronization = Bass.BASS_ChannelSetSync(_numberStream, BASSSync.BASS_SYNC_META, 0, _syncProcChangeTags, IntPtr.Zero);
        SYNCPROC _syncProcChangeTags;
        SYNCPROC _syncProcEndStream;
        private int _numberStream;

        public BassPlayer()
        {
            _syncProcChangeTags = new SYNCPROC(SyncMethodTagsChanged);
            _syncProcEndStream = new SYNCPROC(SyncMethodEndStream);
        }

        /// <summary>Происходит, когда меняются теги, при смене музыки на радиостанции</summary>
        public event EventHandler<RPTagsChangedEventArgs> TagsChanged;
        /// <summary>Происходит, когда кончается воспроизведение потока (музыкального файла). При воспроизведении радио, не срабатывает</summary>
        public event EventHandler EndStream;


        public TAG_INFO TagInfo { get; private set; }


        private void SyncMethodTagsChanged(int handle, int channel, int data, IntPtr user)
        {
            OnTagsChanged(handle, channel, data, user);
        }

        private void SyncMethodEndStream(int handle, int channel, int data, IntPtr user)
        {
            OnEndStream();
        }

        public void OnTagsChanged(int handle, int channel, int data, IntPtr user)
        {
            EventHandler<RPTagsChangedEventArgs> handler = TagsChanged;
            if (handler != null)
            {
                GetTagsFromURLStream();
                handler(this, new RPTagsChangedEventArgs(TagInfo, handle, channel, data, user));
            }
        }

        private void OnEndStream()
        {
            EventHandler handler = EndStream;
            if (handler != null)
                handler(this, new EventArgs());
        }

        /// <summary>
        /// Получить теги с текущего URL потока
        /// </summary>
        void GetTagsFromURLStream()
        {
            TAG_INFO tagInfo = new TAG_INFO();
            Bass.BASS_ChannelGetTags(_numberStream, BASSTag.BASS_TAG_META);
            BassTags.BASS_TAG_GetFromURL(_numberStream, tagInfo);
            TagInfo = tagInfo;
        }
    }

P.S. Но как эту штуку запихнуть в обработку vlc, чтобы он отдавал готовый файл с тегами на устройство, неизвестно.
Почему привел этот пример, в PLEX когда то использовали библиотеки этого плеера, как модуль для воспроизведения интернет потоков, так что теоретически, наверное это возможно и в hms

WD TV LS+Sony KDLS5600/Samsung UEF5400/Sony PS 3/Yamaha RX-V379/hms 2.33
Кладовая HMS (список полезных ссылок и инструкций)
https://hms.lostcut.net/misc.php?action=pun_attachment&amp;item=2914&amp;download=0
Временно отсутствую

10

Re: Получение тэга для проигрываемого радио.

Big Dog пишет:

Совершенно верно WD умеет напрямую цепляться к потокам плейлистов
Есть такая штука называется BassPlayer, там тоже задавались таким вопросом, как получать теги интернет радио и приводили код скрипта (с++), может чем поможет

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

public class BassPlayer
    {
        private int _handleSynchronization;
        //В методе Play() будет использоваться: _handleSynchronization = Bass.BASS_ChannelSetSync(_numberStream, BASSSync.BASS_SYNC_META, 0, _syncProcChangeTags, IntPtr.Zero);
        SYNCPROC _syncProcChangeTags;
        SYNCPROC _syncProcEndStream;
        private int _numberStream;

        public BassPlayer()
        {
            _syncProcChangeTags = new SYNCPROC(SyncMethodTagsChanged);
            _syncProcEndStream = new SYNCPROC(SyncMethodEndStream);
        }

        /// <summary>Происходит, когда меняются теги, при смене музыки на радиостанции</summary>
        public event EventHandler<RPTagsChangedEventArgs> TagsChanged;
        /// <summary>Происходит, когда кончается воспроизведение потока (музыкального файла). При воспроизведении радио, не срабатывает</summary>
        public event EventHandler EndStream;


        public TAG_INFO TagInfo { get; private set; }


        private void SyncMethodTagsChanged(int handle, int channel, int data, IntPtr user)
        {
            OnTagsChanged(handle, channel, data, user);
        }

        private void SyncMethodEndStream(int handle, int channel, int data, IntPtr user)
        {
            OnEndStream();
        }

        public void OnTagsChanged(int handle, int channel, int data, IntPtr user)
        {
            EventHandler<RPTagsChangedEventArgs> handler = TagsChanged;
            if (handler != null)
            {
                GetTagsFromURLStream();
                handler(this, new RPTagsChangedEventArgs(TagInfo, handle, channel, data, user));
            }
        }

        private void OnEndStream()
        {
            EventHandler handler = EndStream;
            if (handler != null)
                handler(this, new EventArgs());
        }

        /// <summary>
        /// Получить теги с текущего URL потока
        /// </summary>
        void GetTagsFromURLStream()
        {
            TAG_INFO tagInfo = new TAG_INFO();
            Bass.BASS_ChannelGetTags(_numberStream, BASSTag.BASS_TAG_META);
            BassTags.BASS_TAG_GetFromURL(_numberStream, tagInfo);
            TagInfo = tagInfo;
        }
    }

P.S. Но как эту штуку запихнуть в обработку vlc, чтобы он отдавал готовый файл с тегами на устройство, неизвестно.
Почему привел этот пример, в PLEX когда то использовали библиотеки этого плеера, как модуль для воспроизведения интернет потоков, так что теоретически, наверное это возможно и в hms

Боюсь, шансов не много. Если я правильно понимаю, HMS обрабатывает все, что связано с названиями и прочими тэгами при чтении свойств или запросом ресурса. А когда уже в потоке идет смена названия...
Может дополнением это можно реализовать...

11

Re: Получение тэга для проигрываемого радио.

Так и есть, понимает только при разбивке, то есть при чётно прописанных метаданных

WD TV LS+Sony KDLS5600/Samsung UEF5400/Sony PS 3/Yamaha RX-V379/hms 2.33
Кладовая HMS (список полезных ссылок и инструкций)
https://hms.lostcut.net/misc.php?action=pun_attachment&amp;item=2914&amp;download=0
Временно отсутствую