Запуск vlc 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.

Читайте также:  Ace stream media android tv apk

Мне не удалось найти какой-либо официальной информации относительно поддержки данного стандарта в 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 я, увы, не нашёл).

Читайте также:  Драг рейсинг андроид машины

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

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

Источник

Documentation:Android

Here is the documentation of the Android port of VLC media player.

Contents

Preliminary Notes

VLC for Android is a little different from VLC on desktops. In some ways, you can do more; in other ways, you can do less. VLC for Android only does media playback. Active streaming or file / stream to file conversations are not supported for usability and performance reasons. This walk-through does only include screenshots of a phone interface for size reasons. However, all features are also available on tablets with a similar appearance.

Feature Overview

Feature Version 1.0 Version 1.6 Version 2.0 Version 2.5 Version 3.0 Version 3.1
Opening Network Streams No Yes Yes Yes Yes Yes
UPnP discovery and streaming No Yes Yes Yes Yes Yes
Plex server discovery and streaming No Yes Yes Yes Yes Yes
Password-protected Plex shares No No No No No No
Downloads from UPnP multimedia servers No No No No No No
FTP discovery, streaming No Yes Yes Yes Yes Yes
Store FTP server bookmarks No No No Yes Yes Yes
Audio Playback via Connector Cables Yes Yes Yes Yes Yes Yes
Video Playback via Connector Cables Yes Yes Yes Yes Yes Yes
Subtitles playback Yes Yes Yes Yes Yes Yes
Subtitles Font Customization No No Yes Yes Yes Yes
Closed Caption playback Yes Yes Yes Yes Yes Yes
Teletext subtitles playback No No Yes Yes Yes Yes
Multi-track audio handling No Yes Yes Yes Yes Yes
Video Filtering incl. Screen Brightness No No No No No No
Video Cropping and Aspect Ratio variation Yes Yes Yes Yes Yes Yes
Deinterlacing Yes Yes Yes Yes Yes Yes
Playback Speed control Yes Yes Yes Yes Yes Yes
Audio/Subtitles delay control No No Yes Yes Yes Yes
Repeated playback Yes Yes Yes Yes Yes Yes
Gestures based playback control Yes Yes Yes Yes Yes Yes
Playback of Audio-only media (mp3, m4a, flac, …) Yes Yes Yes Yes Yes Yes
Audio Playback in Background Yes Yes Yes Yes Yes Yes
Video Playback in Background Yes Yes Yes Yes Yes Yes
Playback timer Yes Yes Yes Yes Yes Yes
Chapter & title selection No No Yes Yes Yes Yes
10-band equalizer Yes Yes Yes Yes Yes Yes
Playback UI Lock Yes Yes Yes Yes Yes Yes
Smart Media Library sorting for audio albums and TV shows Yes Yes Yes Yes Yes Yes
Media Library Search No Yes Yes Yes Yes Yes
Passcode Lock No No No No No No
Voice search support No No No Yes Yes Yes
Voice actions support No No No No No No
Organize media in folders No No No No No No
Use folders as playlists No No Yes Yes Yes Yes
Loop playlists Yes Yes Yes Yes Yes Yes
Playback control through headphones or lock screen Yes Yes Yes Yes Yes Yes
Mediasession support (Wear, TV, etc…) No No Partial Yes Yes Yes
Playback is paused when headphones are unplugged Yes Yes Yes Yes Yes Yes
WiFi upload and HTTP downloads in background No No No No No No
Support for password protected HTTP streams No No No No No No
Sharing files with further apps No No No No No No
Custom vlc:// protocol No No Yes Yes Yes Yes
Support for x-callback-url No No No No No Yes
Action mode No No No Yes Yes Yes
Android TV No Yes Yes Yes Yes Yes
Picture-in-Picture No No Partial Yes Yes Yes
ChromeOS support No ARC ARC Yes Yes Yes
Android Auto No No No Yes No Yes
Sorting No No Partial Yes Yes Yes
360° videos No No No Yes Yes Yes
DayNight mode No No No Yes Yes Yes
Chromecast No No No No Yes Yes
Equalizer custom presets No No No No Yes Yes
Audio boost No No No No Yes Yes
Android 2.1 support Yes Yes No No No No
Android 2.2 support Yes Yes Yes No No No
Android 2.3 support Yes Yes Yes Yes Yes No
Android 6 (Runtime permissions) No No Yes Yes Yes Yes
Android 8 support No No No Partial Partial Yes
Читайте также:  Как восстановить потерянные данные андроида

Installation

There are many ways to install VLC on Android. This may be because you have a non-ARMv7 or x86 processor or do not wish to use the Play Store for whatever reason.

The normal way, for ARMv7 (and above) and x86 processors only. Don’t know your processor? Don’t worry, if you can download it, you have a compatible ARMv7 or an x86 processor.

From the F-Droid Repository

The F-Droid repository (https://f-droid.org) is a completely FOSS (Free and Open Source Software) equivalent to the Google Play Store. The F-Droid Repository and all apps within it are provided completely free of charge and licensed under open source licenses. The F-Droid repository can be downloaded directly from their website. The «Unknown Sources» setting must be turned on for Android devices (typically located in Settings -> Security) in order to install repositories other than the Google Play Store.

From VideoLAN

If you can’t download from the Play Store or just want to install the VLC .apk by yourself, follow these steps:

  1. Go to Android Settings → Security → Device Administration → Enable ‘Unknown Sources’
  2. Go to our download server, preferably from your device: http://get.videolan.org/vlc-android/2.0.6/
  3. Choose your processor architecture (ARMv7 or Intel x86) and grab the .apk file.
  4. Click on the .apk you just downloaded and install it.

Don’t really know your processor architecture? Try both. it’s not very clever, but it’s harmless.

None of the two work? It is possible that you have an older processor with the ARMv6 architecture. The solution for now is to install a Nightly Build release. See below.

Still doesn’t work? Really? Well, then you must have an exotic processor. Contact us, on the Android forum or directly at android-support@videolan.org.

Be a Beta tester or try a Beta release

You want want to know the future of VLC for Android? You want to help us and/or test if your issue is already fixed for the next release ?

Be a Beta tester

Just follow this link Be a Beta tester

Soon, Beta release will automatically install on our device.

Try a Beta release

You don’t want to be a Beta Tester but just try a Beta ? Follow these steps :

  1. Go to Android Settings → Security → Device Administration → Enable ‘Unknown Sources’
  2. Go to our server, preferably from your device, : http://get.videolan.org/testing/android/2.1.13/
  3. Choose your processor architecture (ARMv7, ARMv8, x86. )
    Don’t really know your processor architecture? Try both. it’s not very clever, but it’s harmless
  4. Download the chosen .apk on your device
  5. Click on the .apk you just download and install it.

Install a Nightly Build

You fear nothing and want our very last works on VLC ? Or you have an ARMv6 Processor and want VLC? Follow these steps:

  1. Go to Android Settings → Security → Device Administration → Enable ‘Unknown Sources’
  2. Go to our server, preferably from your device: http://nightlies.videolan.org/
  3. Choose your processor architecture (ARMv7, ARMv8, x86. )
  4. Grab the latest .apk
  5. Click on the .apk you just download and install it.

You may experience some weird issues but generally, it works fine. If not, please try an older nightly release, and contact us.

Interface

At first start, VLC scans all your device to find all your media files. This is the main interface after the scan :

Show Menu
Video view
Audio view
Directory view
History view
Video browser view
Search a specific media
Open network MRL
Load last playlist
More actions :
  • Sort by name or length
  • Refresh your media library
  • Equalizer
  • Preferences
  • About VLC

Playing Video

Video browser view

This view displays all your videos present in your device, or in the directories you have specified (see Preferences). To play one, just click on it, like the video .

Note the difference with the video which is a group of videos : VLC automatically groups your videos with the 4 same starting letters.

A Video
A group of videos.

Video playback interface

Video title
Battery and time
Play / Pause
Aspect ratio
Audio tracks
Subtitles tracks
Video menu (for DVD iso)
Lock screen
Elapsed time
Seek bar
Total time / Remaining time
Advanced Options
  • Playback Speed
  • Sleep timer
  • Jump to specific time
  • Add subtitle
  • You can change audio and/or subtitle track if there are any. If not, these icons won’t be displayed.
  • The Video Menu icon is only displayed for iso video (a DVD iso for example)

Источник

Оцените статью