Android RSS Видеопоток

  1. Предположения
  2. Вступление
  3. Настройте работу пользователя
  4. Заметки

FAIL: при использовании языков, которые имеют собственные модули MySQL, не игнорируйте всю эту тяжелую работу и вместо этого используйте клиент командной строки `mysql`.

Todo: скрипт должен быть обновлен, чтобы использовать Perl привязки для учетных данных базы данных.

Новые андроид устройства - отличный смартфон. Motorola Droid имеет хороший дисплей, а 3G делает потоковую передачу вполне возможной. В этом HOWTO описаны шаги, необходимые для того, чтобы ваш сервер мог транслировать видео на ваш Android.

Предположения

При разработке этого решения вам могут быть предложены различные варианты решения этой проблемы самостоятельно. Таким образом, эти указания могут не относиться непосредственно к вашей ситуации. Таким образом, ваш пробег может варьироваться для этого HOWTO, но общий план должен работать.

  • Сервер: Руководство предполагает Ubuntu 9.10, но я не понимаю, почему другие не будут работать. Вам просто может понадобиться настроить пакеты, которые вы устанавливаете, и настройки для некоторых команд.
  • MythTV: предполагается, что версия 0.22 работает на сервере.

Вступление

Есть три основные задачи, которые необходимо решить, чтобы ваши записанные передачи транслировались на вашем Android:

  1. Получите приложение RSS, которое будет воспроизводить потоковое видео для вашего устройства Android.
  2. Сделайте канал RSS доступным для вашего устройства Android через Интернет.
  3. Создайте задание, которое превратит ваши записи в mp4, которые можно передавать на ваше устройство mp4.

Я решил использовать RSS для представления записей, потому что подумал, что было бы просто найти приложение, которое уже может это сделать. Через некоторое время опробовал различные приложения на рынке Blue RSS. Вы можете найти его, выполнив поиск Blue RSS на рынке. Он имеет простой интерфейс и будет использовать медиаплеер Android по умолчанию для ваших видеопотоков.

После того, как вы настроите свой RSS-канал, у вас будет такой URL: http://www.mydomain.com/feeds/recordings.xml , Меню> Добавить канал позволит вам ввести ваш канал и ваши настройки! Просто, а? Остальное немного сложнее (но не намного).

Вот код для создания вашего RSS-канала.

android_rss.pl

#! / usr / bin / perl # # Дата создания: 2010-02-25 # Последнее обновление: 2010-02-25 # Автор: Джошуа Марш # # Copyright (c) 2010, Джошуа Марш <[email protected]> # Все права защищены. # # Распространение и использование в исходной и двоичной формах, с или без # модификации, разрешено при условии, что соблюдены следующие условия: # # * При повторном распространении исходного кода должно сохраняться указанное выше уведомление об авторском праве, этот список условий и следующее отказ от ответственности. # * При повторном распространении в двоичном виде должны воспроизводиться вышеуказанное # уведомление об авторских правах, этот список условий и следующий # отказ от ответственности в документации и / или других материалах, # предоставляемых при распространении. # * Имя Джошуа Марша и имена его участников не могут быть использованы для поддержки или продвижения продуктов, производных от этого программного обеспечения, без специального предварительного письменного разрешения. # # НАСТОЯЩЕЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ ДИРЕКТОРАМИ И ВЗНОСАМИ АВТОРСКИХ ПРАВ # "КАК ЕСТЬ" И ЛЮБЫХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЯ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ ТОВАРОВ И ФИТНЕСА ДЛЯ ОСОБЫХ ЦЕН. НИ В КОЕМ СЛУЧАЕ НЕ ДОЛЖЕН ОТВЕТСТВЕННОСТЬ ЗА АВТОРСКИЕ ПРАВА ИЛИ ВЗНОСЫ ЗА ЛЮБОЙ ПРЯМОЙ, НЕПОСРЕДСТВЕННЫЙ, # СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ИСКЛЮЧИТЕЛЬНЫЙ ИЛИ КОСВЕННЫЙ УЩЕРБ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЯ, ЗАКУПКУ ЗАМЕЩАЕМЫХ ТОВАРОВ ИЛИ УСЛУГ; , ИЛИ ПРИБЫЛЬ, ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА) ОДНАКО, ПРИЧИНАЮЩАЯ И НА ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, В СООТВЕТСТВИИ С КОНТРАКТОМ, СТРОГОЙ # ОТВЕТСТВЕННОСТЬ ИЛИ ПЫТКА (ВКЛЮЧАЯ ХАРАКТЕРИСТИКУ ИЛИ ИНЫМ ОБРАЗОМ), ВОЗНИКАЮЩИХ В # ЛЮБОМ СПОСОБЕ ИСПОЛЬЗОВАНИЯ НАСТОЯЩЕГО ИЗДЕЛИЯ, НАПРАВЛЕННОГО НА ЭТОМ, НАСТОЯЩЕМУ, НАСТОЯЩЕМУ, НАСТОЯЩЕМУ, НАСТОЯЩЕМУ ЭТОМ ИСПОЛЬЗОВАНИИ НАСТОЯЩЕГО ИЗДАНИЯ # ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА. использовать строгое; используйте функцию qw (скажем); ####### Глобальные переменные ####### my $ mythdir = '/ data / mythtv'; my $ feedsdir = "$ mythdir / feeds"; my $ outdir = "$ feedsdir / recordss /"; мой $ mysql = 'mysql'; мой $ user = 'myth'; мой $ pass = 'myth'; мой $ db = 'mythconverg'; мои $ opts = '-Ns'; my $ mysqlcmd = "$ mysql $ opts -u $ user -p $ pass -D $ db -e"; мой $ url = "http://www.mydomain.com"; # Получить список записанных программ. my @programs = get_program_list (); # Получить список файлов в выходном каталоге. my @encoded = get_files_in_output_dir (); # Удалите в каталоге видео файлы, которых больше нет в списке # записанных программ. clear_old_encodings (\ @programs, \ @encoded); # Распечатайте информацию заголовка для RSS-каналов. print_header (); # Проходить по каждой из записанных программ. print_dir_to_xml (\ @programs, 'records', 'mp4'); # TODO Добавить видео, mp3 и т. Д. Здесь. # Распечатайте информацию нижнего колонтитула для RSS-каналов. print_footer (); ####### Вспомогательные функции ####### sub get_program_list {my $ query = 'SELECT CONCAT_WS (\' _ \ ', chanid, DATE_FORMAT (время начала, \'% Y% m% d% H% i% s \ ')) ИЗ записанной ГДЕ recgroup <> \' LiveTV \ ';'; my @list = `$ mysqlcmd" $ query "`; chomp (@list); return @list; } sub get_files_in_output_dir {my @list = `ls $ outdir | grep -v "xml" | sed -e 's / \. mp4 // g'`; chomp (@list); return @list; } sub clear_old_encodings {my $ Programs = Shift; мой $ кодированный = смещение; для моего $ encodee (@ $ encoded) {my $ found = 0; for (@ $ Programs) {if ($ _ eq $ encodee) {$ found = 1; прошлой; }} if (! $ found) {print STDERR "WARN: '$ encodee' больше нет в базе данных.". "Удаление. \ N"; `rm -f $ outdir / $ encodee.mp4`; }}} sub print_header {say '<? xml version = "1.0&quot; encoding = "UTF-8"?>'; say '<rss version = "2.0">'; сказать «<канал>»; сказать «<title> MythTV Smartphone Recordings </ title>»; сказать '<описание> Мой RSS-канал доступных видео-каналов. </ description>'; скажите «<ссылка>». $ url. '</ link>'; сказать '<язык> en-us </ language>'; } sub print_footer {say '</ channel>'; сказать '</ rss>'; } sub get_program_info {my $ progID = shift; my $ query = "SELECT заголовок, подзаголовок, описание, TIMESTAMPDIFF (МИНУТА, время начала, время окончания) AS длительность, категория, время начала ОТ записано WHERE CONCAT_WS ('_', chanid, DATE_FORMAT (время начала, '% Y% m% d% H % i% s ')) =' $ progID '; "; my $ data = `$ mysqlcmd" $ query "`; данные chomp $; мои @vals = split / \ t /, $ data; my% info = (title => $ vals [0], subtitle => $ vals [1], description => $ vals [2], duration => $ vals [3], категория => $ vals [4], date => $ vals [5], uid => $ progID); возврат \% инфо; } sub print_program_info {my $ pi = shift; мой $ subdir = shift; мой $ extension = shift; сказать "<item>"; say "<title> $ pi -> {'title'} - $ pi -> {'subtitle'} </ title>"; say "<link> $ url / $ subdir / $ pi -> {'uid'}. $ extension </ link>"; say "<guid> \" $ url / $ subdir / $ pi -> {'uid'}. $ extension \ "</ guid>"; сказать "<описание> $ pi -> {описание} </ описание>"; скажем "<enclosure url = \" $ url / $ subdir / $ pi -> {'uid'}. $ extension \ "length = \" $ pi -> {duration} min \ "type = \" video / mp4 \ "/>"; сказать "<категория> $ pi -> {'категория'} </ category>"; say "<pubDate> $ pi -> {'date'} </ pubDate>"; сказать "</ item>"; } sub print_dir_to_xml {my $ files = shift; мой $ subdir = shift; мой $ extension = shift; foreach (@ $ files) {chomp; # Убедитесь, что файл существует, если (! -E "$ feedsdir / $ subdir /$_.$ extension") {print STDERR "ОШИБКА: '$ feedsdir / $ subdir /$_.$ extension' не завершается. Пропуск. \ п "; следующий; } # Получить информацию о файле из БД для RSS-каналов. my $ program_info = get_program_info ($ _); # Распечатать информацию в формате XML. print_program_info ($ program_info, $ subdir, $ extension); }}

Глобальные переменные используются, чтобы описать, где хранятся mpg, и куда пойдут mp4. Он также содержит учетные данные mysql и URL-адрес вашего веб-сайта. Вы должны изменить их в соответствии с вашими потребностями. Вы также можете изменить содержимое подпрограммы print_header. Он не имеет никакого отношения к каналу, но заставит ваш Blue RSS отображать полезную информацию.

Эффект этого сценария довольно прост. Он использует базу данных мифа, чтобы найти файлы, которые вы установили для записи. Затем он проверяет место, где хранятся ваши mp4. Если есть mp4-файлы, у которых больше нет записи, они очищаются (я предположил, что мне не нужны файлы, которые я просмотрел и удалил. Если вы не чувствуете того же самого, закомментируйте строку clear_old_encodings. ). Затем он выводит RSS-канал RSS на стандартный вывод.

Сделав это, вы можете создать задание cron для перенаправления RSS-канала RSS в местоположение вашего веб-каталога. Моя работа cron выглядит так:

0 * / 4 * * * /var/www/icub3d/application/scripts/android_rss.pl> /data/mythtv/feeds/recordings.xml

При наличии RSS-канала нам просто нужно убедиться, что Apache правильно его обслуживает. Я настроил сценарий так, чтобы вы в конечном итоге могли добавлять разные каналы (возможно, в свои mp3 или видео). Каждый из типов может иметь свой собственный подкаталог. По умолчанию это записи. Итак, образец фида может выглядеть так:

recordings.xml

<? xml version = "1.0&quot; encoding = "UTF-8"?> <rss version = "2.0"> <channel> <title> MythTV Smartphone Recordings </ title> <description> Мой RSS-канал о доступных видео-каналах. </ description> <link> https://www.mydomain.com/ </ link> <language> en-us </ language> <item> <title> Опра Уинфри - </ title> <link> http: / /www.mydomain.com/recordings/1021_20100226165300.mp4 </ link> <guid> "http://www.mydomain.com/recordings/1021_20100226165300.mp4" </ guid> <description> Опра обсуждает темы с гостями до аудитория студии. </ description> <enclosure url = "http://www.mydomain.com/recordings/1021_20100226165300.mp4" length = "7 мин" type = "video / mp4" /> <категория> Обсуждение </ категория> <pubDate> 2010-02-26 16:53:00 </ pubDate> </ item> </ channel> </ rss>

Это означает, что вам нужно убедиться, что место, где хранятся ваши mp4, доступно в каталоге / recordss / вашего веб-сервера. Для моей настройки мои записи были в / data / mythtv / feeds / recordss /, поэтому я просто сделал символическую ссылку на корень каталога моего веб-сервера.

Я был заинтересован в том, чтобы действительно заблокировать свои файлы и доступ к своему каналу RSS, поэтому я создал страницу PHP, которая аутентифицировала бы пользователя с помощью значений GET, и заставил SSL просматривать канал. Это означало, что RSS-канал не будет доступен, если не выбраны правильное имя пользователя, пароль и тип. Затем я добавил опцию -Indexes в каталог записей в конфигурации apache. Вы можете сделать что-то подобное, но это выходит за рамки этого документа.

Настройте работу пользователя

На данный момент, единственное, что нам нужно сделать сейчас, это убедиться, что наши файлы записей транскодируются в потоковый формат mp4, который может прочитать Android. Вот как я это сделал:

mp4.sh

#! / bin / bash, если [! $ # == 1]; затем выведите «Usage: $ 0 FileID» exit fi # Уникальный FileID из базы данных (chan_id + '_' + startdate) FID = "$ 1"; MYTHDIR = "/ data / mythtv" OUTDIR = "$ MYTHDIR / feeds / records" INFILE = "$ {1} .mpg" OUTFILE = "$ {1} .mp4" INPATH = `find $ MYTHDIR -name" $ ​​INFILE " 2> / dev / null | голова -n1`; # Выясните, в каких измерениях мы должны закодировать это через аспект. VINFO = `mplayer -vo null -ao null -frames 10 -identify" $ {MYTHDIR} / $ {INFILE} "2> / dev / null` ASPECT =` echo $ VINFO | egrep -oe "Фильм-аспект это [0-9:.] +" | egrep -o "[0-9:.] +" `if [" $ ASPECT "==" 1.78: 1 "] затем WIDTH = 432 HEIGHT = 240 else WIDTH = 480 HEIGHT = 360 fi VBITRATE = 248k SIZE =" $ {WIDTH} x $ {HEIGHT} "ABITRATE = 128k ACODEC =" - acodec libfaac "# Создать MP4 ffmpeg -i" $ {INPATH} "-s $ {SIZE} -b $ {VBITRATE} -f mp4" $ { OUTDIR} / $ {OUTFILE} "MP4Box -tmp" $ {MYTHDIR} / tmp / "-hint" $ {OUTDIR} / $ {OUTFILE} "

Конфигурации для этого файла аналогичны сценарию perl. Убедитесь, что переменные каталога соответствуют вашей системе и что они доступны для записи пользователю mythtv.

Этот сценарий оболочки имеет несколько интересных частей. Сначала он пытается выяснить, есть ли видео в формате 4: 4 или 16: 9. Это использует это, чтобы выяснить правильные размеры для видео. На мой взгляд, чем меньше мы должны транскодировать и передавать через Интернет, тем лучше. Скорость передачи также установлена ​​на низком уровне. Это было намеренно, хотя. Если вы думаете, что сможете увеличить пропускную способность вашей домашней системы, вы можете увеличить скорость.

Второе, что он делает, это перекодирует файл в mp4 с новым размером и битрейтом. ffmpeg хорошо выполняет свою работу. Возможно, вам придется установить специальные аудио- или видеокодеки для него. Ubuntu устанавливает большинство из них из репозиториев Medibuntu. libfaac, например, был хорошим кодеком. Я никогда не заканчивал тем, что использовал это, хотя ffmpeg, казалось, делал достаточно хорошую работу самостоятельно. В Unbuntu 10.04 мне пришлось изменить строку на ffmpeg -i "$ {INPATH}" -s $ {SIZE} -b $ {VBITRATE} -f mp4-ac 2 -ar 24000 -ab 65535 "$ {OUTDIR} / $ {OUTFILE} ", чтобы заставить его работать с моими записями DVB.

Если вы больше ничего не сделали, вы можете воспроизвести mp4 на вашем Android-устройстве, скопировав его, но вы не сможете осуществлять потоковую передачу. Проблема в том, что ffmpeg не содержит подсказок для пропуска в видео. MP4Box сделает это за нас. Пользователь Ubuntu может получить MP4Box, установив пакет gpac.

Теперь вы должны сделать это одним из ваших пользовательских заданий. Это должно быть выполнено так:

/path/to/script/mp4.sh% CHANID% _% STARTTIME%

Убедитесь, что ваша работа включена. Я установил мой запуск по умолчанию для всех записей. Вы также должны убедиться, что ваша работа настроена на выполнение. Мой бэкэнд-миф отключил его, хотя в пользовательском интерфейсе он был настроен и настроен на автоматический запуск. Мне потребовалось некоторое время, чтобы понять, почему он не запускается автоматически.

Заметки

Есть еще некоторые изменения, которые мне нужно сделать в моей системе. Одна проблема, которую я заметил, заключается в том, что ffmpeg иногда (примерно 1 к 5) смещает звук на полсекунды. Это почти незаметно на низких битрейтах видео, но на более высоких оно становится довольно раздражающим.

Кроме того, размеры вашего видео могут измениться при перекодировании. Эти настройки хорошо работают на Motorola Droid, но я не эксперт A / V. Если у вас есть лучшие настройки, я был бы рад услышать это.

Просто, а?
Mp4`; }}} sub print_header {say '<?
Quot; encoding = "UTF-8"?
Quot; encoding = "UTF-8"?

Новости

Социальные сети в России, зима 2015-2016 Цифры, тренды, прогнозы | Блог Brand Analуtics — все о бренд мониторинге и социальной аналитике
Представляем данные регулярного исследования активной аудитории социальных сетей в России, зима 2015-2016. В исследовании представлены данные по аудитории, возрасту, полу и региональному распределению

SMM маркетинг от А до Я
Развитие социальных сетей породило новую огромную бизнес отрасль — СММ маркетинг. Это когда мы приходим с нашим продуктом в какую-нибудь соцсеть, находим там нашу целевую аудиторию, и предлагаем ей наш

Полезно знать
20.02.2014 Что такое Pinterest. Визуальный PR и маркетинг Pinterest или ПИНТЕРЕСТ – социальная сеть, использующая вместо текстов картинки и изображения, которые можно добавлять в аккаунт,

Фейсбук Моя страница: ВХОД на свою страницу Facebook
Фейсбук (Facebook) Моя страница — это личная страница каждого зарегистрированного пользователя самой большой в мире социальной сети.  Фейсбук даёт возможность людям с разных уголков Земли общаться между

Анализ социальных сетей
АНАЛИЗ СОЦИАЛЬНЫХ СЕТЕЙ (social network analysis) - новое направление структурного подхода, основными целями которого являются исследование взаимодействий между социальными объектами и выявление условий

Социальные сети для продвижения бизнеса: какие выбрать?
  Привет, друзья! Социальные сети занимают львиную часть времени в нашей жизни. Ежедневный просмотр новостей, любимых групп и переписка с друзьями – это любимое дело большинства молодых людей. Вот и

ВРЕДНОЕ ВЛИЯНИЕ СОЦИАЛЬНЫХ СЕТЕЙ НА ЗДОРОВЬЕ ЧЕЛОВЕКА - VI Студенческий научный форум (15 февраля - 31 марта 2014 года)
ВРЕДНОЕ ВЛИЯНИЕ СОЦИАЛЬНЫХ СЕТЕЙ НА ЗДОРОВЬЕ ЧЕЛОВЕКА Гущина Н. В., Люлина Н.В. С распространением всемирной паутины рост социальных сетей по всему миру стал глобальным явлением. С каждым

Влияние социальных сетей на подростков. Пропаганда суицида в сетях
Почему мы любим интернет? Почему молодым людям, подросткам сказать «Привет» стало проще, познакомившись в интернете, чем просто подойти в реальности? Почему все «сидят» в социальных сетях? Социальные сети

Маркетинг в социальных сетях (SMM) для продвижения компании
Деятельность в социальных сетях, на блогах и форумах по повышению лояльности клиентов получила название SMM — от аббревиатуры английского звучания этого термина – Social Media Marketing. Аудитория

Фейсбук (Facebook) - что это за сеть: как пользоваться ФБ
Фейсбук — это самая популярная и большая социальная сеть в мире. Если Вам интересно узнать больше о Facebook, про то как пользоваться сетью и о некоторых «фишках» ФБ — этот материал именно для вас!