Просмотр RTMP-потока на телевизорах Samsung

Мой телевизор Samsung UE46C5000QW не умеет просматривать видео, транслируемое в UDP или в RTMP. Зато он умеет смотреть фильмы по сети с использованием DLNA, поэтому я решил попробовать настроить связку телевизора UE46C5000QW и роутера D-Link DIR 300 Rev b для просмотра IPTV без использования компьютера — это не так уж и сложно.

Родная прошивка DIR 300 вполне справлялась с UDP потоками, но преобразовать UDP поток в DLNA-совместимый HTTP поток ей не по зубам. Пришлось сменить прошивку роутера на DD-WRT v24-sp2 (build 14896). Прошивка хороша тем, что под нее можно собирать много линуксовых приложений, загружать их при необходимости и использовать по прямому назначению. Под прошивку были найдены udpxy (преобразователь udp потока в tcp), и upnpd — маленький демон, который публикует плейлисты в DLNA-совместимом формате. Информации о том, как это можно сделать, в сети навалом; так же как и сборок этих приложений под большинство роутеров, работающих под DD WRT или OpenWRT.

Все бы хорошо, но вот потоки RTMP по-прежнему смотреть на телевизоре было невозможно. Для преобразования RTMP в HTTP был давным-давно написан пакет rtmpdump, в составе которого есть маленький прокси — rtmpgw, который в теории должен справляться с задачей.

Но тут есть три проблемы. Во-первых, чистый rtmpgw не добавляет правильные заголовки в http-поток, в результате чего телевизор разрывает соединение и ругается на неподдерживаемый формат файла (даже если видео и аудио кодеки абсолютно точно поддерживаются им). Любой расово правильный медиаплеер (mplayer, vlc) показывают такие потоки, но не телевизоры Samsung.

Во вторых, из-за одной довольно криво написанной функции оригинальный rtmpgw очень нехило кушает CPU, что не есть хорошо.

В-третьих, я так и не нашел готовой сборки rtmpgw для dd-wrt своего роутера. Поэтому пришлось качать исходники, ковыряться в исходном коде и собирать свой вариант rtmpgw. И в результате у меня получился вот такой бинарник rtmpgw (mipsel, не путать с mips — он не совместим) — качайте на здоровье и можете ставить его в свой роутер.

Использовать его можно примерно так. На роутере сохраняются команды, выполняемые при каждой загрузке:

cd /tmp
wget http://www.bloged.org/downloads/rtmpgw
chmod +x rtmpgw
/tmp/rtmpgw --buffer 120000 -v -g 8082 -D 192.168.1.1 >/dev/null 2>/dev/null &

где 192.168.1.1 — внутренний IP роутера

Если запуск прошел успешно, то по адресу http://192.168.1.1:8082 будет транслироваться RTMP поток, который можно передать в качестве параметра. Проверить работоспособность можно из локальной сети за роутером:

vlc "http://192.168.1.1:8082/?r=rtmp:%2F%2Fvipwowza.yacast.net%2Ffrance24_live_en&s=http:%2F%2Fwww.france24.com%2Fen%2Fsites%2Fall%2Fmodules%2Fmaison%2Faef_player%2Fflash%2Fplayer_new.swf&t=rtmp:%2F%2Fvipwowza.yacast.net%2Ffrance24_live_en&p=http:%2F%2Fwww.france24.com&y=f24_liveen.stream"

VLC покажет англоязычную трансляцию France 24, если мой бинарник совместим с вашей прошивкой и вы все сделали правильно. К сожалению, транслировать такое в телевизор Cамсунг не получится — конкретно в этом потоке он не поймет кодеки (по крайней мере мой телевизор ругается на них). Тут нужен транскодинг, но это уже совсем другая тема для разговора.

Остальные каналы, которые я нашел с кодеками H264 – MPEG-4 AVC / Mpeg Audio Layer (mpga), транслируются без проблем.

Заметил одну особенность в некоторых трансляциях. Часть из них транслируются нормально, у другой части наблюдается прогрессирующее отставание звука от картинки на телевизорах Samsung. Убогий самсунговский плеер почему-то не может синхронизировать видео и звук при длительной работе на таких потоках. Причем если поток сохранить в файл и открыть его через DLNA, отставания нет даже в телевизоре; оно наблюдается только при онлайн трансляции. А в vlc или mplayer такая проблема не наблюдается вообще, они умеют синхронизировать картинку со звуком, даже если в потоке есть потери фреймов.

OpenSuse и интернет через Bluetooth

Nokia E5

Я уже писал про использование телефона Nokia E5 в качестве модема, и даже приводил настройки интернета для черногорского оператора M-tel. Все это работает отлично, если бы не одно НО. Длинна USB кабеля для Nokia E5 меньше 10 сантиметров, и уж очень неудобно его крепить к ноутбуку. Телефон постоянно свешивается, дергается; связь может теряться в зоне неуверенного приема. И я решил попробовать использовать телефон в качестве модема при соединении через Bluetooth.

Оказалось, все делается очень просто. Сначала надо сделать так, чтобы телефон и ноутбук снюхались по Bluetooth. Это делается очень просто — на телефоне разрешается соединение Bluetooth для всех, и с помощью апплета gnome-bluetooth находится телефон среди доступных. Далее следует обмен пин-кодами и вуаля, две железки снюхались.

Затем надо посмотреть, какой канал модема используется в телефоне. Ищем адрес телефона:

notebook:~ # hcitool scan
Scanning ...
        04:A8:2A:93:CE:48       Nokia E5

Далее выясняем номер канала модема:

# sdptool browse 04:A8:2A:93:CE:48
…
Service Name: Dial-Up Networking
Service RecHandle: 0x10009
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 5
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100
…

В моем случае это Channel 5. Теперь надо настроить модем:

# cat /etc/bluetooth/rfcomm.conf
#
# RFCOMM configuration file.
#

rfcomm0 {
        # Automatically bind the device at startup
        bind yes;

        # Bluetooth address of the device
        device 04:A8:2A:93:CE:48;

        # RFCOMM channel for the connection
        channel 5;

        # Description of the connection
        comment "Nokia E5 Bluetooth Modem";
}

Номер канала в настройках модема должен совпадать с номером обнаруженного канала, иначе модем работать не будет. После этого надо создать конфигурационный файл для «звонилки». Привожу свой конфиг для черногорского оператора T-mobile:

# cat /etc/wvdial.conf
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","tmcg-wnw"
Modem = /dev/rfcomm0
Phone = *99#
Idle Seconds = 30000
Modem Type = USB Modem
Stupid Mode = 1
Compuserve = 0
Baud = 460800
Auto DNS = on
New PPPD = Yes
Dial Command = ATDT
Ask Password = 0
ISDN = 0
Password = 38167
Username = 38167

Ну и последний скрипт запуска «звонилки»:

# cat start_internet_via_bluetooth.sh
#!/bin/sh
rfcomm release 0 # разрываем текущую связь устройства с модемом
rfcomm bind 0 04:A8:2A:93:CE:48 5  # привязываем модем телефона на 5-м канале к устройству rfcomm0
wvdial # набираем номер и подключаемся к интернету

Вот теперь телефону не обязательно находиться рядом с ноутбуком. Его можно держать, например, на балконе (где уровень сигнала выше чем в помещении). Главное, чтобы ноутбук видел телефон, а телефон видел сеть. Скорости передачи данных более чем достаточно для голосовой связи по SIP или Skype.

Про перемотку, DLNA и телевизор Samsung.

Смеркалось. KTorrent докачивал очередной фильм в FullHD, и в мою не совсем трезвую голову пришла шальная мысль: а почему бы и не посмотреть это кино на телевизоре вместо монитора? А что, кабель HDMI — есть, на видеокарте выход HDMI — есть, на телевизоре разьем HDMI тоже имеется. Соединить одно с другим несложно и этот вариант 100% рабочий. Но мы не ищем легких путей, ибо телевизоров дома может быть несколько и вдруг мне приспичит посмотреть на каждом ящике свой фильм — одного кабеля HDMI будет маловато.

Так что созрел у меня коварный план — поднять у себя DLNA-сервер и раздавать фильмы в локальной сети. С OpenSuSe 12.2 поставить miniDLNA вообще не проблема, но сложности начались там, где я их не ожидал. Телевизор Samsung UE46C5000QWX прекрасно воспроизводит фильмы через DLNA, но отказывается их перематывать. Однако у меня были подозрения, что телевизор все-таки перематывать умеет, т. к. при выключении фильма и повторном его запуске он предлагал продолжить воспроизведение с места остановки. Если внимательно вчитаться в инструкцию к телевизору, то там будет написано — перемотка не поддерживается при просмотре видео через DLNA; и это касается многих моделей Samsung TV.

Однако методом научного тыка и просмотра камментов к багам miniDLNA таки были обнаружены кнопки на пульте, которые перематывают видео. Они оказались нестандартные, вместо кнопок перемотки надо было нажимать на кнопки навигации по меню (вправо и влево) — и перемотка стала работать как надо.

Правда, есть один нюанс, перемотка срабатывает не всегда. Например, файлы flv скачанные с youtube почему-то не перематваются. Но это уже не проблема, т. к. перекодировать flv в avi (который легко перематывается) совсем не сложно:

mencoder -oac mp3lame -ovc lavc -o file.avi file.flv

Вообще, телевизоры Samsung производят приятное впечатление по качеству железа, и отвратительное по качеству софта/прошивок. Непонятная ситуация с перемоткой может расцениваться как бага или как недокументированная фича; а вот отсутствие возможности отключения экрана при проигрывании музыки — это уже серьезная недоработка, которую Samsung и не думает исправлять.

Новый сервис – Аудиоредактор

Я тут новый сервис наваял — Аудиоредактор. Он позволяет загружать аудио файлы на сервер, конвертировать их в AAC, M4R, MP3, OGG или WAV, а также вырезать выбранный интервал из трэка. Также можно добавить эффект приглушения звука в начале и в конце трэка (эффект fade), загружать аудио по прямым ссылкам.

Есть и экспериментальная фича, можно вырезать звук из ролика в Youtube. Только честно скажу, это срабатывает не всегда: иногда youtube банит айпишник за слишком частое скачивание; иногда ругается на то, что в стране сервера просмотр ролика невозможен из-за ограничения авторских прав; могут быть и другие причины.

Но в целом все работает, может кому-то будет интересно.

Как скачать видео с YouTube

Youtube не стоит на месте, и способы скачивания видео, описанные здесь и здесь, больше не работают в Firefox. Зато я открыл для себя новый способ скачивания видео — с помощью плагина FlashGot.

Этот плагин очень умный, он может использовать один из существующих системных загрузчиков (curl, wget или любой другой доступный в системе) для скачивания видео в заданную директорию. Он определяет URL видео, подставляет в загрузчик правильный Referer, UserAgent и Cookie, и Youtube без проблем отдает видео на скачивание — так как считает, что отдает его браузеру, а не загрузчику. Просто и эффективно.

OpenSuSe 12.2: я ожидал большего

Логотип OpenSuSe

Наконец-то руки дошли до последнего дистрибутива OpenSuSe. Старая добрая версия 11.4 работала без нареканий, и на 12.1 я ее менять не стал. Но так как вышла 12.2, поддержка версии 11.4 вскоре будет прекращена, и рано или поздно с нее придется уйти.

И вот настал тот день, когда со стаканом в руке и нехорошими мыслями в голове запустил я обновление с 11.4 до 12.2. Предчувствие меня не обмануло, обновление вышло очень кривым — не повторяйте моих ошибок. Обновляльщик в 12.2 был достаточно умным, чтобы не испортить старый работающий софт; но недостаточно сообразительным, чтобы предсказать, что обновленная система будет работать нестабильно. В результате чего я забекапился, снес все что было и поставил OpenSuSe 12.2 на чистый винт.

Все бы хорошо, да начались проблемы там, где их совсем не ожидал. Скажем, если у вас на компьютере больше одной операционной системы, то скорее всего в 12.2 время будет показываться весьма криво. Почему-то модуль Yast, отвечающий за настройку часов, с упорством маньяка ставит галку, что аппаратные часы установлены в UTC (а не в местное время). В результате чего часы всегда становились в таймзону Гринвича после каждой перезагрузки. Одним словом — низачот, зачем сломали работавший модуль?

В 11.4 я сидел на Gnome, и изредка использовал IceWM в качестве оконного менеджера. Gnome 2 был очень хорош, гибок в настройках и удобен для работы. 12.2 шла уже с Gnome 3, на который без слез не глянешь. Вообще в разработке графических оконных менеджеров пошла какая-то нездоровая тенденция — взять классный работающий софт, испортить его внешний вид и напихать в него хренову тучу ненужной фигни, и обозвать сию поделку новой версией. Так было с KDE4, так стало и с Gnome 3. Но разработчики Gnome 3 пошли еще дальше, слишком уж радикально поменяв дефолтную тему оконного менеджера. Говорят, что можно Gnome 3 допилить так, чтобы он выглядел как Gnome 2 и убить на это довольно много времени; но в дистрибутиве OpenSuSe 12.2 не нашлось места для темы Gnome 2 — а искать его в интернетах мне просто было лень. Поэтому с крайним неудовольствием пришлось плюнуть на Gnome 3 и пересесть на KDE4, который тоже далеко не сахар.

В KDE4 есть классный текстовый редактор Kate, которым я пользовался пару-тройку лет назад. Потом я пересел на gedit, и ИМХО он оказался лучше. Делать он может все то же самое, только настройки более гибкие. Я как-то писал уже про gedit 2, и решил попробовать gedit 3 в OpenSuSe 12.2. И новый gedit мне понравился — хотя и тут без странностей не обошлось. В 11.4 гибко настраивать gedit можно было с помощью конфигурилки Gnome — gconf-editor. Gedit 3 же почему-то настраивается с помощью другой утилиты, dconf-editor. И плагины, которые раньше жили в /usr/share/gedit/plugins теперь почему-то переехали в /usr/lib/gedit/plugins — но это мелочи.

В 11.4 в репозитории Games была одна классная игрушка, hedgewars. Наш дружный коллектив разработчиков периодически страдает херней с помощью нее снимает стресс, постреливая друг в друга из разного вида оружия. К сожалению, доблестные разработчики так и не смогли собрать rpm-ку с ежами под OpenSuSe 12.2, из-за того, что не смогли соблюсти все зависимости от софта, установленного в этот дистрибутив. Очередной мелкий камешек в сторону этого не очень удачного дистрибутива.

Работа модема через GPRS / 3G в OpenSUSE 11.4

Обнаружил интересную багу в работе модема через GPRS или 3G. В качестве звонилки я использую wvdial с вот такими настройками:

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","mtelinternet"
Modem = /dev/ttyACM0
Phone = *99***1#
Idle Seconds = 30000
Modem Type = USB Modem
Stupid Mode = 1
Compuserve = 0
Baud = 460800
Auto DNS = on
New PPPD = Yes
Dial Command = ATDT
Ask Password = 0
ISDN = 0
Password = internet
Username = internet

Соединение происходит, адреса DNS серверов успешно получаю при соединении, а вот сам интернет работает через раз. Причем угадать, будет ли он работать или нет, никакой возможности не имеется. Симптомы следующие, после установки соединения wvdial пытается отресолвить какое-то тестовое доменное имя, и таким образом определяет, работает ли DNS в установленном соединении:

Warning, can not find address for www.suse.de
Warning, address lookup does not work
Nameserver (DNS) failure, the connection May not work.

Если такие предупреждения видны, то возможны 2 ситуации.

Во-первых, wvdial не смог прописать адреса DNS сервера в /etc/resolv.conf. Лечится прописыванием адресов провайдера вручную — что и было сделано; но проблема не была устранена полностью.

Во-вторых, возможны проблемы с размерами окна tcp в туннеле ppp. В этом случае надо поиграться с настройками размера окна tcp:

echo “0″ >/proc/sys/net/ipv4/tcp_window_scaling

Лично мне это очень помогло, после чего я решил установить такие настройки в системе по умолчанию — дописал в /etc/sysctl.conf вот такую строчку:

net.ipv4.tcp_window_scaling = 0

и перечитал параметры:

# sysctl -p

После всех манипуляций интернет стал работать намного более стабильно. В качестве модема я использовал свой телефон Nokia E5

Обзор телефона Nokia E5

Nokia E5

Решил я свой телефон поменять, ибо мой SonyEricsson K750i уже морально и физически устарел. К новому телефону предъявил следующие требования:

  1. Он должен быть Труъ Телефономъ, т.е. быть классической формы и не быть тачскрином
  2. Он дожен уметь совершать голосовые звонки в Skype и в других SIP клиентах через Wi-Fi
  3. В идеале он должен держать заряд подольше
  4. Желательно наличие QWERTY клавиатуры

На текущий момент под такие требования подошло всего несколько телефонов стоимостью до 7к рублей. Очень заинтересовали 2 из них, BlackBerry Curve 8520 и Nokia E5; но как выяснилось, Блекбери не подойдет. Дело в том, что по непонятным причинам на российский рынок поставляют эти модели с залоченым вайфаем. В принцепе эта проблема решаема, в сервисном центре недолго думая смогут его включить, однако нести только что купленый телефон в сервисный центр – моветон.

Так что мой выбор пал на Nokia E5, и я его купил. Но первое впечатление оказалось отвратительным. Версия софта на телефоне была древней, жутко тормозила и периодически телефон зависал. Пришлось скачать програмку Nokia Mobile Suite, и с ее помощью залить в телефон последнюю версию софта с исправленными багами. Но опять же это оказалось непросто, ибо пару раз в процессе заливки софта телефон намертво вис, и процесс приходилось начинать заново.

После ряда безуспешных попыток обновить софт мне в голову пришла светлая мысль – а не сделать ли телефону Hard Reset? Благо на нокиях это делается совсем просто – с помощью ввода сервисного кода *#7370#.

И тут случилось чудо, телефон перестал виснуть – тогда мне и удалось его обновить до версии софта 091.001 (версию софта можно узнать набрав *#0000#).

После обновления телефон стал работать нормально, исчезли зависания и тормоза. Домашняя точка доступа WiFi сразу подцепилась телефоном, и можно было бы начать тестирования звонков с использованием SIP. Однако выяснилось, что почему-то Нокия не установила в систему приложение Advanced SIP Settings, без которого встроенный SIP клиент работать не сможет. Пришлось курить много форумов, искать решение проблемы – но все же проблему решить удалось.

Для этого пришлось завести себе аккаунт на developer.nokia.com, и скачать вот отсюда SIP VOIP 3.x Settings (164 Kb). Главное не промахнуться, т.к. SIP VOIP 3.1 Settings не совместимы с Nokia E5-00. Без регистрации на developer.nokia.com скачать не получится, поэтому регистрация обязательна.

После установки софта встроенный SIP клиент заработал на отлично. Но как оказалось, можно обойтись и без него. Через магазин Ovi можно скачать два бесплатных SIP клиента – Fring и Nimbuz, они замечательно справляются со звонками через SIP. Nimbuz на мой взгляд удобнее, т.к. в отличие от Fring он позволяет регистрировать сразу несколько SIP аккаунтов.

Следующим на очереди был Skype. В Ovi Store он тоже был в качестве бесплатной программы, но почему-то передача голоса в нем работала отвратительно – было слышно сплошное бульканье, в результате чего собеседник ничего не мог разобрать из нашего разговора. Это лечится установкой скайпа с сайта skype.com, только ОБЯЗАТЕЛЬНО надо ставить версию Skype для платформы S60 без тачскрина (в настоящий момент последняя версия Skype v.1.50.12, т.е. файл называется Skype_S60_3_0_v_1_5_0_12.sisx). Загруженный с сайта Skype работает на ура.

Вот теперь телефон меня устраивает на все 100%. Держит заряд отлично, удобно набирать текст на клавиатуре; качество голоса при звонках через WiFi – отличное, при звонках через 3G – приемлемое.

А еще в телефоне обнаружился чудо-режим работы Автономный, при котором телефон блокирует доступ к сети оператора сотовой связи. Т.е. звонить и чатиться можно в нем только через Wi-Fi без боязни попасть на деньги, связанные с использованием интернета в роуминге. Особенно актуально это тем, кто только что слез с самолета в аэропорту и решил сделать звонок домой об успешном приземлении.

А раз так, то грабительским расценкам за роуминг можно сказать “Прощай”, ибо Wi-Fi есть практически везде, куда я езжу. Не везде он бесплатный, но в любом случае стоимость работы в платной сети вайфай на несколько порядков ниже стоимости звонка в роуминге. Я знаю о чем говорю, т.к в далеком 2010-м году я сдуру позвонил из аэропорта Майами, что обошлось мне в 150 рублей за минуту разговора. А вайфай в этом аэропорту полностью бесплатен; даже розетки питания есть возле кресел в зале ожидания – и они доступны для всех желающих с ноутбуками.

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

Любопытное поведение Adobe Flash Player в OpenSuSe 11.4

При просмотре видео в браузере заметил одну багу фичу. Если видео проигрывается в обычном окне, оно показывается нормально; при просмотре же в полноэкранном режиме изображение начинает сильно дергаться. Я грешил на древность Flash Player’а, но оказалось, что он не при чем. У меня были отключены все эффекты рабочего стола, и почему-то это влияло на Flash Player. Как только поставил галку “Включить эффекты рабочего стола” в настройках в центре управления – Flash Player заработал превосходно в полноэкранном режиме.

Про Paypal и регистратора internet.bs

С начала марта internet.bs перестал принимать Paypal для оплаты доменов. Если верить информации с их стены в фейсбуке, Paypal заблокировл их аккаунт для приема платежей:

Why have you stopped accepting PayPal?

It was not our decision, actually Paypal without notice and without a clear explanation suspended the service. We are working with them to find a solution.

We are shocked by their approach, but we are sure they will soon review their position as they might have received wrong or inaccurate reports, after all we are an ICANN domain name Registrar we only sell domains and we have always been in full compliance with their published policies and rules. As such there is really little ground for them to unilaterally suspend their services in particular without notice. Of course we welcome any advice or suggestion to have them reestablish the account without delay.

You should also notice that we have backup solutions for payment such as Moneybookers, WebMoney, AlertPay and we are working on 2Checkout and WorldPay. Last but not least we have applied for a dedicated merchant account, so we won’t be subject to third party “fancy” polices.

Особенно повезло американцам, которые регистрировали домены у багамского регистратора. Американцам уже давно прикрыли лавочку с Moneybookers (ныне именуемых Skrill), так что американскому трудовому народу придется пересаживаться на Webmoney или палить номера своих кредитных карточек в других сомнительных финансовых сервисах.