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. Если у вас есть лучшие настройки, я был бы рад услышать это.

Похожие

Как войти в среду загрузчика и восстановления Android
Есть случаи, когда необходимо войти в загрузчик Android или в системы восстановления - возможно, у ОС проблемы,
10 лучших приложений для часов и цифровых часов для Android
Часы приложения были среди первых доступных приложений. В конце концов, смартфоны отлично показывают время. У тебя всегда это есть на тебе. Телефоны сильно эволюционировали. Приложения для часов тоже есть, но не так много. Они
Строка агента пользователя
Обновлено 4 октября 2018 г. Что такое строка агента пользователя? Пользовательский агент - это часть программного обеспечения, которая действует от имени пользователя, например веб-браузер. Однако строка пользовательского агента отправляется браузером как заголовок HTTP-запроса и определяет используемую операционную систему, версию браузера и другую информацию, предоставляемую
Sims 4: Добро пожаловать на работу - ведение бизнеса • Eurogamer.pl
Приложение Добро пожаловать на работу вводит не только Доктор наук, детектив и ученый профессий , но также позволяет вам создать свой собственный магазин. Стоит задуматься о выборе этого пути, если у вас уже есть достаточно классических профессий и выполняющих предопределенные обязанности. В своем бизнесе вы становитесь боссом, и только от ваших действий зависит, сколько денег
Родительский контроль в Android - как обезопасить телефон для ребенка?
... пользователя только в список общих игр. Имея такую ​​функцию в телефоне, мы можем активировать ее, когда наш ребенок захочет что-то сыграть на нашем телефоне. На Android просто установите Kids Place. После запуска приложения вам необходимо установить 4-значный PIN-код, а также указать адрес электронной почты, чтобы восстановить его, если вы его забудете.
Как играть в Minecraft с друзьями на Windows 10, Xbox One и Android (Cross-Play)
Minecraft получил функцию Cross-Play. Это означает, что люди, у которых есть Minecraft на Windows 10, Android и Xbox One, теперь могут играть вместе в мультиплеере, независимо от того, какая у них платформа.
Android, iOS, Windows - системы для смартфонов - магазин komputronik.pl
При выборе смартфона самый распространенный вопрос какой смартфон будет лучшим? На рынке появляются новые «улучшенные» модели, поэтому сложно выбрать, что будет для нас наиболее подходящим. Легко не заметить, что является самым важным, что заставляет телефон работать так, а не иначе. Сердце и мозг каждого смартфон это его операционная система,
Как использовать ApowerMirror
ApowerMirror - это приложение, которое позволяет вам транслировать экран устройств Android / iPhone на вашем компьютере. Программа также позволяет управлять устройствами Android с компьютера с помощью мыши и клавиатуры. Используя программу, вы можете удобно воспроизводить мультимедийные файлы,
Не похоже, что вы не могли искать работу через Facebook раньше. Каждый, кто недавно находился на стадии п...
Не похоже, что вы не могли искать работу через Facebook раньше. Каждый, кто недавно находился на стадии поиска работы, имел возможность использовать одну из групп, которыми на местном уровне управляли частные лица, и в которых еще много предложений. Однако теперь на сайте Цукерберга открыт официальный раздел, посвященный этому в Польше. Поиск работы в различных группах Facebook по-прежнему имеет свои недостатки. Поток информации хаотичен - предложения, которые нам не интересны, могут
Как установить и использовать ADB, Android Debug Bridge Utility
ADB, Android Debug Bridge, - это утилита командной строки, включенная в Android SDK от Google. ADB может контролировать ваше устройство через USB с компьютера, копировать файлы туда и обратно, устанавливать и удалять приложения, запускать команды оболочки и многое другое.
Windows 10 - руководство пользователя, советы, настройка
... работу компьютера. Однако перед тем, как вы это сделаете, стоит сделать резервную копию (либо скопировав самые важные файлы на внешний носитель, либо воспользовавшись инструментом из «Настройки»> «Обновления и безопасность»> «Резервное копирование»). Чтобы восстановить заводские настройки системы: Включить меню «Пуск» Найдите и запустите «Сброс настроек компьютера до исходного состояния» Выберите опцию «Пуск» в области основных настроек.

Комментарии

В: Почему я не слышу / не могу записать звук с Android при подключении к компьютеру с помощью приложения ApowerMirror?
В: Почему я не слышу / не могу записать звук с Android при подключении к компьютеру с помощью приложения ApowerMirror? A: К сожалению, ApowerMirror не позволяет вам передавать аудио с Android. Для этого вы должны использовать службы Chromecast или Google Home для выполнения проекции Android в ApowerMirror через WiFi. В: Есть ли какие-либо сочетания клавиш в приложении ApowerMirror? A: Да. Вы можете нажать Ctrl + Q, чтобы сделать
Почему мы начинаем разговор о Windows Phone с Android?
Почему мы начинаем разговор о Windows Phone с Android? Потому что генезис обеих систем был очень похожим. Windows Phone также был создан в спешке, и его первая версия была, ну, в общем, монстром. Сверху элегантный, гладкий и - я должен признать - стабильный. Однако под ним скрывалось архаичное ядро ​​Windows CE и среда выполнения, взятые из медиаплеера Zune. Windows Phone не разрабатывался в течение двух лет. Его последняя версия - 8.1 Update 2 - появилась более двух лет назад. Эта
Первое касается выбора платформ, на которых мы создаем приложение - iOS, Android, Windows Phone?
Первое касается выбора платформ, на которых мы создаем приложение - iOS, Android, Windows Phone? Если клиент заинтересован почти в 100% охвате рынка - он решает все, но если необходимо ограничить бюджет - он выбирает только ключевые. Каждая платформа отличается и требует разного подхода при разработке функциональности. Это специфика мобильного мира - к проектам предъявляются одинаковые требования, но результирующие приложения немного отличаются. Каждое приложение адаптировано к стандартам пользовательского
Что такое Android TV и почему был убит Google TV?
Что такое Android TV и почему был убит Google TV? Что такое Android TV и почему был убит Google TV? Android TV заменяет пятилетнюю Google TV. И это не просто обновление - это полный римейк. Прочитайте больше , Думаете ли вы, что это хорошо или плохо, зависит от того, где вы стоите в лучших дебатах об операционной системе Smart TV. Мудрость
Что такое строка агента пользователя?
Что такое строка агента пользователя? Пользовательский агент - это часть программного обеспечения, которая действует от имени пользователя, например веб-браузер. Однако строка пользовательского агента отправляется браузером как заголовок HTTP-запроса и определяет используемую операционную систему, версию браузера и другую информацию, предоставляемую веб-серверу. Соглашения об именах для строк пользовательских агентов могут иногда вводить в заблуждение, поскольку они часто
Как вы меняете свое имя пользователя?
Как вы меняете свое имя пользователя? Как запустить безопасный режим? Как сменить язык? Как отключить брандмауэр? Как войти в настройки биоса? Как я могу восстановить систему до заводских настроек? Что вместо Movie Maker? Во введении: PPM - правая кнопка мыши, LPM - левая. Также ознакомьтесь с руководствами пользователя, т.е.
Как ускорить работу ноутбука?
Как ускорить работу ноутбука? Замените жесткий диск на SSD - Руководство

Просто, а?
Mp4`; }}} sub print_header {say '<?
Quot; encoding = "UTF-8"?
Quot; encoding = "UTF-8"?
Что такое строка агента пользователя?
В: Почему я не слышу / не могу записать звук с Android при подключении к компьютеру с помощью приложения ApowerMirror?
В: Есть ли какие-либо сочетания клавиш в приложении ApowerMirror?
Почему мы начинаем разговор о Windows Phone с Android?
Первое касается выбора платформ, на которых мы создаем приложение - iOS, Android, Windows Phone?
Что такое Android TV и почему был убит Google TV?

Новости