MainRadiotalkCustom
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

icecast2+liquidsoap = странная проблема с id3-tag в кодировке UTF8

 

96
solariz @solariz
Приветствую!

Итак, анамнез пациента:

в конфиге liquidsoap
set("tag.encodings",["UTF-8"])

в конфиге icecast2

<mount>
<mount-name>/live</mount-name>
<password>pppppp</password>
<max-listeners>300</max-listeners>
<charset>utf8</charset>
<public>0</public>
<stream-name>regress78.com</stream-name>
<stream-description>24/7 non-stop rock music</stream-description>
<stream-url>regress78.com</stream-url>
<genre>Rock</genre>.
<bitrate>192</bitrate>
<type>ogg</type>
<subtype>vorbis</subtype>.
<hidden>0</hidden>
</mount>

т.е. UTF8 везде сконфигурирован...

далее, в консоли:

# liquidsoap -r '7. Molitva.flac'
Request resolved.
comment="Free 14-day trial - **********"
genre="progressive heavy metal"
rid="0"
status="ready"
initial_uri="7. Molitva.flac"
tracknumber="7"
temporary="false"
filename="7. Molitva.flac"
title="Молитва"
decoder="FLAC"
artist="DvärG"
kind="{audio=0+;video=0+;midi=0+}"
date="2012"
album="Скала (The Rock)"
composer="DvärG"
Computing duration: 175.51 sec.

Как видим, с кодировкой все ок, вроде...

Но далее, столкнулся с такой вот проблемой:

parseMusic({"/live":{"server_name":"Regress Radio","description":"internet-radio","title":"DvärG - Молитва"
и


Надоумьте меня, неразумного, в какую сторону копать! Вроде бы все нормально настроил же... ((
С меня нештяки.

P.S. Да, забыл сказать, если рестартануть liquidsoap и icecast, то некоторое время всё работает нормально. В логах никаких ошибок нет.

Отредактировано solariz - 08.04.2016
382
Grigorij @gyurgin_1
Попробуйте в liquidsoap set("tag.encodings",["UTF-8","ISO-8859-1"]) (ISO для совместимости с западноевропейскими) ну и в icecast поправьте <charset>UTF-8</charset> - это правильный вариант.

96
solariz @solariz
gyurgin_1 пишет:

ну и в icecast поправьте <charset>UTF-8</charset> - это правильный вариант.

Так! Похоже, что все дело было в моей невнимательности... а я уже собрался в исходники айскаста лезть... =/

Выношу искреннюю благодарность!

За ништяками - добро пожаловать в личные сообщения...

96
solariz @solariz
А, нет ( Как любил говорить мой бывший учитель физкультуры - "ребята, рано сосать друг-другу члены!"...
Проблема осталась - некоторое время работало нормально видно из-за рестарта айскаста (

382
Grigorij @gyurgin_1
В output.icecast добавьте encoding="UTF-8", вот как то так output.icecast(%mp3(bitrate=192), icy_metadata="true", encoding="UTF-8", format="audio/mpeg"...

96
solariz @solariz
так... пока работает. Возьмем небольшой тайм-аут...

382
Grigorij @gyurgin_1
Еще ********** есть, можно переписать на php при желании, правда будет слегка громоздко и понадобятся проблемные файлы для тестов. Проще как мне кажется пофиксить теги в файлах, это виндовская кодировка вылазит...

96
solariz @solariz
да
output.icecast(%mp3(bitrate=192), icy_metadata="true", encoding="UTF-8",
решает вопрос - второй день работает нормально! Спасибо!
Самое странное, что я уже пробовал этот способ, но ставил этот параметр самым первым в output.icecast - не думал, что очередность имеет значение...
Metadata fixer, кстати, тоже весьма забавное решение...

Ну, теперь-то точно пора за ништяками! ;)

382
Grigorij @gyurgin_1
В ЛС отписал.

96
solariz @solariz
все равно сломалось всё... завтра буду смотреть на Metadata fixer....

382
Grigorij @gyurgin_1
В def fix_meta сразу рекомендую логирование добавить чтобы хоть видно было что там происходит, так например:
log (label="metadata",level=1, quote (m["artist"] ^" - "^ m["title"]))
.

96
solariz @solariz
Metadata fixer тоже не помог. Корректно отработало все лишь несколько часов. Тут какая-то хитрая засада... (

382
Grigorij @gyurgin_1
Да все решаемо, надо только проблему воспроизвести. Смотрим ЛС.

96
solariz @solariz
В итоге проблему utf-8 решил следующим образом. Получение данных о текущем треке внутри плеера:


function getCurrent(){
var url = '**********';
var ic = new iconv.Iconv('utf-8', 'utf-8');
var options = {
url: url,
encoding: null
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
body = ic.convert(body).toString('utf-8');
var resp = JSON.parse(body.replace('parseMusic(','').replace(');',''));
for (var item in resp){
if(resp[item].title){
if(resp[item].title != currentSong){
currentSong = resp[item].title.toUpperCase();
io.emit('songs', {current: currentSong, list: null});
}
}
}
}
})
}