Stream files from android to android

Потоковое видео в Android

В этой заметке я хочу рассказать о некоторых подводных камнях, с которыми можно столкнуться при работе с потоковым видео в Android приложениях. Конкретно, речь пойдёт о конвертации видео и протоколах доставки/воспроизведения видео.
Сразу оговорюсь, что экспертом я в данной области не являюсь, а лишь хочу поделится недавно полученным опытом.

Представим, что перед вами стоит задача реализовать Android приложение, способное проигрывать множество файлов, заливаемых пользователями на ваш сервер. Написать свой youtube, с блекджеком и кодеками. Для этого вам придётся решить как минимум две задачи: конвертации видео к поддерживаемому на Android формате, воспроизведение видео с удалённого источника. Рассмотрим обе эти задачи более подробней.

Конвертация видео

И так, прежде чем воспроизвести какое-то видео нашем Android устройстве, надо это видео перекодировать в поддерживаемый формат. В документации к Android чётко обозначен список этих самых форматов.

Для того, что бы перекодировать файлы, заливаемые пользователями на ваш сервис, или же записать поток с TV-тюнера, вам потребуется помощь специальной утилиты ffmpeg, являющейся де-факто стандартом в отрасли. Подробную инструкцию по её установке можно найти на сайте одноимённого проекта.

Наиболее распространённым сейчас (на мой взгляд) способом хранения видео является контейнер MP4 с использованием кодека H.264 AVC. Их мы, собственно, и рассмотрим.

Первым делом обратите внимание, что Android поддерживает не все возможности кодека H.264, а только определённый набор — профиль, именуемый Baseline Profile(BP). Так, например, в BP не входят такие полезные фичи H.264 как CABAC или B-Frames.

Для нас это значит, что если мы будем использовать эти фичи при кодировании видео, то Android проигрывать это видео будет не обязан. Хотя и может, если ваш телефон достаточно мощный и вендор позаботился об установке и поддержке дополнительных кодеков. Так, например, видео в Main Profile без проблем проигрывается на Samsung Galaxy SII. На телефонах же обычного класса (например, Samsung Galaxy Ace) мы получим сообщение о невозможности воспроизведения видео и ошибку с кодом неверного кодека в logcat‘е.

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

ffmpeg -i in.3gp -f mp4
-vcodec libx264 -vprofile baseline -b:v 1500K
-acodec libfaac -b:a 128k -ar 44100 -ac 2
-y out.mp4

Рассмотрим подробнее каждый из параметров:

  • -i src входной (перекодируемый) файл;
  • -f mp4 используемый видеоконтейнер;
  • -vcodec libx264 используемый видеокодек;
  • -vprofile baseline используемый профиль;
  • -b:v 1500K bitrate;
  • -acodec libfaac используемый аудиокодек;
  • -b:a 128k аудио bitrate;
  • -ar 44100 частота звука;
  • -ac 2 количество аудиопотоков;
  • -y флаг перезаписи выходного файла;

Так же стоит отметить, что можно обойтись и без указания профиля, а явно включить/отключить нужные опции кодека H.264 через параметр -x264opts, так что бы они удовлетворяли условиям BP. Но это же занятие для любителей.

Раздача видео

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

Как же быть? Платформа Android предлагает нам нативную поддержку следующих технологий/протоколов:

  • HTTP/HTTPS progressive streaming;
  • HTTP/HTTPS live streaming;
  • RTSP (RTP, SDP);

Рассмотрим их по порядку.

Progressive streaming

Наиболее простой способ раздачи видео с помощью обычного web-сервера, сводящийся по сути к скачиванию заранее подготовленного файла по HTTP(S) протоколу. Вся соль в данном случае заключается в том, что воспроизведение файла начинается не по окончанию загрузки, а как только будет скачано достаточно данных (наполнен некоторый буфер).

Тут стоит уточнить, что при использовании контейнера MP4, необходимо сформировать файл так, что бы метаданные о видео потоке (moov atoms) располагались в начале файла (после атома ftyp), перед видеоданными (mdat atoms). Сделать это можно с помощью обработки файла утилитой qt-faststart:

Основной проблемой progressive streaming‘а является невозможность перемотки видео к нескачанному моменту, наличие достаточного количества свободного места на устройстве и необходимость поддержки большого числа «толстых» клиентов, скачивающих видео, на web-сервере.

Воспроизведение с помощью данной технологии поддерживается платформой Android нативно. Вы без проблем (если не считать канал связи, мощность девайса и наличие свободного места) сможете проиграть удалённый файл с помощью стандартного класса MediaPlayer.

Pseudo streaming

Данная технология является логическим расширением progressive streaming‘a и позволяет решить одну из его главных проблем — перемотки к ещё не скачанному фрагменту. Применима для контейнеров MP4/FLV с кодеком H.264/AAC.

Единственным отличием от progressive streaming‘a в данным случае является, тот факт, что вам потребуется специальный web-сервер, который с учётом временной метки в GET-запросе будет отдавать нужный вам фрагмент видео файла. Примером такого web-сервера естественно может служить православный NGINX с его ngx_http_mp4_module.

Читайте также:  Как найти выключенный андроид если потерял

Мне не удалось найти какой-либо официальной информации относительно поддержки данного стандарта в Android. Однако, эмперическим путём было установлено, что она присутствует как минимум на устройствах HTC Desire и Samsung Galaxy SII. Однако, хочу обратить внимание, что да же в случае отсутствия нативной поддержки на вашем устройстве всегда можно воспользоваться сторонними плеерами типа MX Player, которые самостоятельно реализуют логику скачки и воспроизведения фрагментов видео с нужной временной меткой, что позволяет организовать перемотку.

Live streaming

Довольно нестандартный протокол передачи данных от компании Apple. Суть его сводится к тому, что раздаваемый файл «пилится» на множество небольших частей, объединяемых спецтальным файлом-playlist’ом формата M3U8. Передача данных происходит по протоколу HTTP(S).

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

Однако, появляются и проблемы. Для «распила» файла и создания playlist’а потребуется ресурсы процессора, время и место на сервере. Для вещания файла в сеть, как и в предыдущих примерах, потребуется HTTP сервер (без каких-либо дополнительных модулей).

«Распилить» видео файл можно использовать VLC:

Воспроизвести такой файл можно по URL localhost/pornofilm.m3u8.

Поддержка HTTP Live Streaming на нативном уровне в Android присутствует начиная с версии 3.0. С помощью сторонних плееров (DicePlayer, MX Player), судя по wiki, можно добиться поддержки с версии 2.2.

Real Time Streaming Protocol (RTSP)

Протокол прикладного уровня с поддержкой состояния, разработанный специально для передачи видео. Формат команд очень напоминает HTTP. Сами же команды напоминают кнопки на обычном кассетном магнитофоне: PLAY, PAUSE, RECORD и т.д.

В отличие от HTTP Live Streaming RTSP не требует разбиения фалов на мелкие части и составления playlist’ов. Нужные части файла будут генерироваться и отдаваться клиенту налету. В качестве RTSP сервера можно использовать VLC.

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

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

Поэтому вернёмся к протоколу RTSP и воспроизведению видео по требованию (Vidoe On Demand). Для того, что бы использовать VLC в качестве RTSP сервера для проигрывания VOD необходимо прежде всего запустить VLC, указав атрибуты RTSP сервера и Telnet интерфейса:

vlc -vvv -I telnet —telnet-password 123 —rtsp-host 127.0.0.1 —rtsp-port 5554

После этого как сервер запущен, необходимо произвести его настройку. Делать это удобнее всего с помощью telnet‘a, так как такой подход даёт возможность настройки налету:

setup porno input /path/to/pornofilm.mpg

Для воспроизведения видео (в том числе и на платформе Android) необходимо запросить его по URL rtsp://localhost:5554/pornofilm.

Из недостатков можно отметить тот факт, что HTTP открыт зачастую на всех firewall’ах и проксях… с RTSP в случае политики Deny,Allow всё иначе.

Кроме того, при использовании RTSP-сервера для добавления/удаления файлов на сервере придётся обновлять его конфигурацию (список vod’ов). Да, для этого есть telnet, но это всё равно сложнее, чем просто заливать или удалять файлы из каталогов web-сервера.

Воспроизведение с помощью данной технологии поддерживается платформой Android нативно. Например, с помощью всё того же стандартного класса MediaPlayer.

Multicast

Многие считают, что multicast не работает в Android. Это не совсем так.

Во первых, в большинстве случаев он просто отключен по умлочанию, что бы не грузить ресурсы девайса лишней работой. Его можно просто включить.

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

Однако, как показывает практика, проигрывать multicast видео на Android всё можно. В моём случае с этой задачей удачно справился недавно вышедший VLC Beta для Android.

Кроме того с помощью VLC-сервера всегда можно свести воспроизведение multicast‘a к HLS:

new multicast-porno vod enabled

setup multicast-porno input udp://@192.168.20.1:1234

Попытать удачу с проигрыванием multicast’a на вашем устройстве вы можете, передав плееру URL вида udp://@192.168.20.1:1234.

Что выбрать

Если с форматом видео всё ясно (H.264 BP / MP4), то со спобом дистрибуции вопрос открыт. У каждого их них есть свои достоинства и недостатки.

Первым делом из рассмотрения я бы убрал обычный progressive streaming. Да он работает всегда и везде, но отсутствие перемотки и загрузка всего файла целиком — это уже слишком.

Следующим кандидатом на вылет является live streaming. Главным его недостатком является нативная поддержка в Android начиная с версии 3.0. А игнорирование более 80% пользователей c версией 2.x — не вариант. Хотя тут можно посмотреть на сторонний плеер, или заняться собственной реализацией (свободных наработок для поддержки HLS я, увы, не нашёл).

Читайте также:  Как убрать экран блокировки android

И последним я бы вычеркнул RTSP. Да, это протокол, разработанный специально для видео. Да, его использование идейно верно. Но есть два момента. Во первых — необходимо постоянно обновлять конфигурацию сервера. Во вторых, HTTP открыт всегда и везде, чего нельзя сказать о RTSP/RTP.

Лично я бы остановился на pseudo streaming. Он позволяет осуществлять перемотку и при этом не скачивать весь файл полностью. От нас требуется только немного донастроить web-сервер.

Источник

Top 10 Apps to Transfer Data From Android To Android

Bought a new Android Phone? Congratulations! Now you might be looking for easy ways to transfer all the important data from your old Android phone to the new one.

With millions of apps available in the market, it is obvious to get confused in selecting which app to use to transfer the data.This article will discuss the best 10 apps among which will easily transfer data from one Android device to another.

So, let’s begin with the list of Apps:

Apps Google Play Store Rating
SHAREit 4.1
Samsung Smart Switch 4.3
Xender 3.9
Send Anywhere 4.7
AirDroid 4.3
AirMore 3.9
Zapya 4.5
Bluetooth File Transfer 4.1
LG Mobile Switch 3.7
Huawei Backup 4.2

If you’re looking for a desktop software to transfer your photos from Android to Android, you can try MobileTrans — Phone Transfer:

MobileTrans — Phone Transfer

Transfer Photos from Android to Android with One Click

  • Easily transfer contacts, music, messages, notes, apps, photos, videos, and more.
  • No iTunes, iCloud needed. Easy to operate and fast transfer speed.
  • Fully compatible with iOS 14 and Android 10.0.
  • Transfer data to a new android phone without resetting.

1. SHAREit

The first app on the list is one of the most popular and favorite apps of the time: SHAREit. All you need is the downloaded app on both the devices between which the data is to be transferred. The devices need to be connected via Wi-Fi and once that is done, you can see the files you can transfer.

Files of any type like movies, songs, documents, pictures, apps, and much more can be transferred using SHAREit. The receivers can select the files and apps they want to receive without bothering the sender. With SHAREit, you can transfer the files with the speed up to 20 Mb/ second. Not only this, with its CLONEit feature, you can also copy the important data from the sender device within a few minutes.

2. Samsung Smart Switch

Another free app that allows transferring data from one Android device to another wirelessly as well as using a cable is Samsung Smart Switch. It mainly supports Samsung Galaxy devices and even comes preloaded in some Samsung devices like S7, S8, S9, Note 8 and Note 9. It allows the transfer of the data between any two Android devices (Lenovo, HTC, Motorola, etc.). The app can also transfer data between two Android devices through the SD card even.

You can transfer contacts, calendars, pictures, music, text messages, and much more. Another main advantage of using Samsung Smart Switch is that it even allows the devices to connect with devices of other platforms like iOS, Windows, and Blackberry for transferring useful files and folders.

3. Xender

Xender is another user-friendly app for Android users to transfer the data from one Android device to another Android device. All you need is to connect the devices through a hotspot and it doesn’t require any wire, cables, or data connection to transfer files of all types. It allows its users to transfer pictures, videos, messages, games, contacts, and much more.

Not only this, but Xender also allows its users to connect four different devices at the same time to transfer the data. You can even transfer the data across different platforms like iOS and Windows and even to PC without any PC side software installation. Xender can share files at a speed of 40 MB/ second without any restrictions in transferring large files.

4. Send Anywhere

Send Anywhere lets its users transfer the data with maximum protection with strong 256-bit encryption and that is why it is the favorite of maximum users is. The app comes for free with in-app purchases but contains ads. It is a cross-platform and a secure Android data transfer app that lets you transfer the data by entering a special 6-digit code or by scanning the QR code to connect. You can share the data without the help of the internet and mobile data. The data can be shared with multiple people using a custom link.

The app also has cloud storage where the data or files can be stored and then shared with any device. The transferred data is not on any server and can send any number of files and other data. One can also go for Send Anywhere Plus using which data of up to 50 GB can be shared at a single time.

5. AirDroid

Recommended by various tech websites like PCWorld, CNET, BGR, and Lifehacker, AirDroid is one of the best apps to transfer the data at a good speed and on different networks. AirDroid not only lets you transfer the files and folders from one Android device to another Android device but also enables its users to control their Android devices wirelessly using their computers. Even if the screen of your Android device goes blank, you can still do what you will be doing normally on the phone and even can trace the phone if by any chance it gets lost. You can transfer the files from Android to PC and vice-versa.

Another benefit of using AirDroid is that its users can also back up their files from phone to computer while sharing the clipboard between the two devices. The only limitation of using AirDroid is that it does not allow the transfer of data to multiple devices.

6. AirMore

AireMore is a management tool for Android and iOS devices which allows the transfer of data from Android to Android, iOS to Android, and vice-versa. Multiple data types like pictures, videos, messages, and documents can be transferred using AireMore. It comes free of cost and allows its users to move, store, and stream data using an internet connection.

With the latest version of Airemore, you can even store your data on the free cloud storage and save your phone’s space.

7. Zapya

Another best high-speed file sharing app on the list is Zapya. It is a cross-platform app that allows data transfer between Android, iOS, Windows Phone, MAC, etc. Using Zapya, you can connect four devices and transfer files of all formats among them using QR code.

Zapya comes with instant messenger feature which allows its users to chat and share streaming content with the nearby group of friends. With Zapya’s phone replication option, you can also backup and transfer files and folders from old phone to new phone. Zapya is free of cost with no display ads and in-app purchases.

8. Bluetooth File Transfer

Bluetooth File Transfer is one of the most underestimated file transfer apps but in reality, it comes with a fast inbuilt file browser and a clean User Interface. You can share files over a Bluetooth connection using the Android Bluetooth File Transfer App. All the files are transferred using a secure connection as authorization of incoming connections is mandatory while using this app. You can also use the integrated browser to move, copy, cut, and delete items you want to and even zip and unzip files with encryption.

9. LG Mobile Switch

Using LG Mobile Switch, the users can transfer the data from either Android phone or iPhone to a new LG Android phone. The data can be transferred using a Wi-Fi or a cable. It allows easy and fast transfer of data of different types like call logs, messages, contacts, pictures, videos, audio, etc. from an Android device to an LG phone. The app easily transfers the data but the only limitation is that it cannot transfer the data which is stored in the cloud like Google Drive and iCloud.

10. Huawei Backup

Huawei Backup is actually for backing up all the important data in any form like contacts, pictures, videos, call records, apps, etc. on a storage device or in the cloud. This backup is encrypted with maximum security and can even be saved in the memory cars, USB drivers, or clouds. From the place of storage of data, the data can be easily transferred to any new Android device hassle-free.

Each of the app mentioned in the list has its offerings but, according to the ratings given by the users, LG Mobile Switch has received the lowest ratings making it the least favorite of all the users while Send Anywhere tops the list among all the 10 apps.

There are many apps in the market which transfer the data from Android to Android but, from a plethora of apps, the above-mentioned 10 apps are the most efficient and secure apps to transfer the data. Now, the final decision to select the best-fit app depends upon your requirements.

Источник

Читайте также:  Векторные обои для андроида
Оцените статью