Ogarnianie sieci*, czyli mobilne multimedia w sieci lokalnej

multimedia dlna android ffmpeg 2010-09-26, 22:09,

Artykuł dotyczy udostępniania multimediów w sieci lokalnej, z wykorzystaniem protokołów TCP/IP, DLNA oraz uPNP, czyli jak zrobić, by pliki przechowywane w jednym miejscu dostępne były jednocześnie na komputerze, telewizorze, Playstation, iPadzie, iPodzie oraz Nokiach z systemem Symbian, a także na innych urządzeniach mobilnych (w najbliższych dniach poddam próbom także Sony Ericssona XPerię X10 mini pro z systemem Android 1.6).

Słowo wstępu, czyli trudne terminy wcale nie są trudne

  • WiFi - w taki sposób oznacza się komputerowe sieci bezprzewodowe. Mogą one pracować w kilku różnych standardach (b / g / n), z różnymi prędkościami (1 - 300 Mbps) oraz na różnych częstotliwościach (2.4 GHz i 5 GHz), o czym więcej za chwilę.
  • DLNA - Digital Living Network Alliance to organizacja skupiająca największych producentów sprzętu multimedialnego, telewizorów, amplitunerów, konsol. Logotypem DLNA oznacza się także urządzenia zdolne do rozmawiania ze sobą w celu udostępniania oraz korzystania z udostępnionych multimediów.
  • uPNP - Universal Plug'N'Play - standard sieciowy, będący punktem wyjścia dla urządzeń DLNA, w celu udostępniania sobie materiałów (w kontekście tego artykułu)
  • Serwer multimediów - komputer lub urządzenie udostępniające materiały multimedialne dla potrzeb innych urządzeń
  • Klient - urządzenie (telewizor, komputer, konsola, telefon) umożliwiające przeglądanie biblioteki udostępnionej przez serwer oraz odtwarzanie zgromadzonych materiałów.

Czym nadawać i czym odbierać - wersja łatwa i przyjemna

Najprostszym sposobem udostępniania materiałów audio-wideo oraz zdjęć między urządzeniami jest uruchomienie gotowego programu. Użytkownicy Windows (XP, Vista, 7) mogą skorzystać np. z Windows Media Playera. Wystarczy autoryzować urządzenie, a system udostępni i odpowiednio skataloguje posiadaną bibliotekę mediów.

Użytkownicy konsoli Playstation3 oraz komputerów Macintosh mogą udostępnić sobie multimedia korzystając z bezpłatnego programu PS3 Media Server, który nie tylko zajmuje się strumieniowaniem multimediów do konsoli, ale także zadba o odpowiednią konwersję plików na właściwy format.

Użytkownicy Linuxa mogą podeprzeć się bezpłatnym pakietem uShare, o którym znacznie więcej będzie w drugiej, trudniejszej części artykułu.

Odtwarzanie na różnych urządzeniach:

  • WiFi - w taki sposób oznacza się komputerowe sieci bezprzewodowe. Mogą one pracować w kilku różnych standardach (b / g / n), z różnymi prędkościami (1 - 300 Mbps) oraz na różnych częstotliwościach (2.4 GHz i 5 GHz), o czym więcej za chwilę.
  • DLNA - Digital Living Network Alliance to organizacja skupiająca największych producentów sprzętu multimedialnego, telewizorów, amplitunerów, konsol. Logotypem DLNA oznacza się także urządzenia zdolne do rozmawiania ze sobą w celu udostępniania oraz korzystania z udostępnionych multimediów.
  • uPNP - Universal Plug'N'Play - standard sieciowy, będący punktem wyjścia dla urządzeń DLNA, w celu udostępniania sobie materiałów (w kontekście tego artykułu)
  • Serwer multimediów - komputer lub urządzenie udostępniające materiały multimedialne dla potrzeb innych urządzeń
  • Klient - urządzenie (telewizor, komputer, konsola, telefon) umożliwiające przeglądanie biblioteki udostępnionej przez serwer oraz odtwarzanie zgromadzonych materiałów.

Czym odtwarzać:

  • Playstation3: Wbudowany odtwarzacz mediów strumieniowych
  • Nokia E52: Menu / Aplikacje / Media domowe / Przeglądaj serwery / Nasz serwer / Opcje / Odtwarzaj na tym urządzeniu
  • Nokia N95: Menu / Narzędzia / Łącza / Media domowe / Nasz serwer / Opcje / Odtwarzaj na tym urządzeniu
  • iPhone: MLPlayer Lite (dostępny w App Store, free)
  • iPad: MLPlayer Lite for iPad (dostępny w App Store, free)

Konwersja, transkodowanie, prędkość sieci, czyli o czym pamiętać, by wszystko chciało działać

Standardy DLNA/uPNP lepiej lub gorzej załatwiają sprawę samego udostępnienia materiału. Urządzenia są w stanie zobaczyć pliki, przeglądać katalogi i rozpocząć lub zakończyć transmisję. Odtworzenie materiału wymaga jeszcze, by urządzenie odtwarzające obsługiwało format, w którym zakodowany jest materiał.
Dla przykładu iPad jest w stanie odtwarzać wideo w jakości do 720p (1280x720), przy maksymalnie 30 fps, zakodowane kodekiem h264 Main Profile, z 2-kanałowym dźwiękiem AAC. Dodatkowo plik musi mieć rozszerzenie M4V, by został zinterpretowany jako plik wideo.
Konsola XBOX360 jest w stanie odtworzyć plik Windows Media Video HD, z kodekiem VC-1. Playstation3 dla odmiany bez problemu radzi sobie z h264 High Profile w rozdzielczości FullHD z 6-kanałowym dźwiękiem i kilkoma ścieżkami audio w jednym pliku.

Stąd bardzo ważny jest dobór formatu, który ma być odtwarzany lub zastosowanie odpowiedniego transkodera. Wspomniany PS3 Media Server bez problemu radzi sobie z kodowaniem wideo w formacie MKV zastępując go odpowiednim formatem, zrozumiałym dla konsoli PS3 (pod warunkiem posiadania odpowiednio wydajnego komputera, który zakoduje film w czasie rzeczywistym, co dla filmów w HD jest wyczynem niebanalnym).

Kolejnym aspektem, o którym należy pamiętać jest rodzaj sieci, która łączy urządzenia. Przykładowo film jakości HD, znajdujący się na nośniku BluRay może zawierać sekwencje, których bitrate, czyli szybkość transmisji danych, przekracza 45 Mbps (megabitów na sekundę). Z prostej kalkulacji widać, że taki materiał po sieci bezprzewodowej typu B (efektywnie 3-4 Mbps) oraz G (do 20 Mbps) nie przejdzie i dopiero posiadanie sieci w standardzie N jest w stanie podołać zadaniu (a i to tylko w optymalnych warunkach i małym ruchu).

Natomiast łącząc urządzenia kablem Ethernet 100 lub 1000 Mbps raczej nie napotkamy na problemy związane z przepływnością, chyba że inni użytkownicy sieci również będą oglądać filmy w tym samym czasie.

Ogarnąć sieć, czyli udostępnianie multimediów różnymi kanałami

Pierwsza część materiału miała charakter wstępu, druga część dotyczyć będzie bardzo konkretnego scenariusza multimedialnego. W sieci będą używane dyski NAS, serwer z systemem Linux, szkielet Ethernet, sieć WiFi b/g/n oraz urządzenia klienckie, takie jak telefony komórkowe (iPhone, Nokia N95/E52), konsola do gier (Playstation3) oraz iPad.< br /> Tematyka poruszana w dalszej części będzie wymagała odrobiny znajomości zagadnień sieciowych, protokołu TCP/IP, podstaw Linuxa oraz odrobiny wiedzy o kodekach audio/wideo.
Warto też pamiętać, że serwer uShare wykorzystywany w tym tekście nie jest rozwijany, nie ma więc co liczyć na specjalną pomoc lub na korekty błędów, które pojawiają się podczas korzystania z niego.

Dla ułatwienia realizacji projektu przyjmuję dwa standardy wideo - jeden, zgodny z dużymi urządzeniami oraz drugi przeznaczony dla urządzeń mobilnych.

  • Profil wysokiej jakości:
    • kodek mpeg-4 + audio aac
    • rozdzielczość wideo <= 1280x720
    • audio 48000 Hz, 2 lub 6 kanałów, do 2 ścieżek audio
    • rozmiar pliku < 4 GB (plik mp4 musi mieć 32-bitowy nagłówek dla zachowania zgodności z PS3 i iPadem)
    • bitrate do 12 Mbps
  • Profil mobilny:
    • kodek mpeg-4 + audio aac
    • rozdzielczość wideo <= 480x360 (ekran iPhone do 3G, 3GS, iPhone 4 powinien działać na profilu normalnym)
    • audio 48000 Hz, 2 kanały, 1 ścieżka audio
    • bitrate do 800 Kbps
    • Serwer NAS:
      • dowolny serwer zgodny z Samba
    • Serwer DLNA:
      • Fedora Core 11 (Leonidas)
      • uShare 1.1a

Przygotowania i konfiguracja

Krok pierwszy to połączenie urządzeń serwerowych w sieć. Potrzebne będą:

  • serwer Linux z kartą Ethernet
  • opcjonalny serwer NAS (jeżeli mają być używane niezależne dyski sieciowe)
  • switch
  • kilka kabli kategorii 5e lub wyższej

Na serwerze instalujemy system Linux (w tym przypadku Fedora Core 11 dla PowerPC) oraz konfigurujemy statyczny adres IP dla karty sieciowej. Następnie konfigurujemy usługę DHCP (może być też skonfigurowana na routerze zapewniającym dostęp do internetu). Plik konfiguracyjny może wyglądać następująco:

/etc/dhcp/dhcpd.conf :
# Przeszukiwanie domeny
option domain-name "mojalokalnadomena";
option domain-search "mojalokalnadomena";
# DNS
option domain-name-servers 192.168.0.20;
# Czas wygasania adresu
default-lease-time 600;
max-lease-time 7200;
authoritative;
# konfiguracja sieci lokalnej w klasie C
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.150;
range 192.168.0.20 192.168.0.22;
option routers 192.168.0.100;
}
# trzy hosty o stałych adresach IP
host ruter {
hardware ethernet 00:01:02:03:04:05;
fixed-address 192.168.0.100;
}

host airport {
hardware ethernet 00:01:02:03:04:06;
fixed-address 192.168.0.101;
}

host PS3-Sergio {
hardware ethernet 00:01:02:03:04:07;
fixed-address 192.168.0.22;
}

Serwer następnie uruchamiamy i ustawiamy, by startował automatycznie z uruchomieniem komputera:

service dhcpd start chkconfig dhcpd on 

Po zapewnieniu sobie działania serwera DHCP oraz statycznych IP dla serwera oraz opcjonalnego NAS zadbać trzeba o pakiet ffmpeg niezbędny do konwersji oraz uShare do ich udostępnienia. Dla Fedory najłatwiej jest to zrobić konfigurując repozytorium Livna. Instalację wykonujemy zgodnie z instrukcją na  stronie repozytorium Livna.

Następnie wykonujemy polecenia:

yum install ffmpeg yum install ushare

Instalator zajmie się wszystkim i zadba, by wszystkie biblioteki znalazły się na swoim miejscu.

Kolejnym krokiem jest skonfigurowanie uShare poprzez edycję pliku /etc/ushare.conf. Domyślnie plik zawiera wszystkie opcje oraz stosowne komentarze do nich. Istotne opcje to:

# uShare UPnP Friendly Name (default is 'uShare'). - przyjazna nazwa widoczna w sieci
USHARE_NAME=Mac-Mini
# Directories to be shared (space or CSV list). - lista katalogów do udostępnienia
# Ex: USHARE_DIR=/dir1,/dir2 USHARE_DIR=/home/video,/home/music,/home/photo
# Use XboX 360 compatibility mode (yes/no) - zgodność z XBOX 360
USHARE_ENABLE_XBOX=no
# Use DLNA profile (yes/no) - zgodność z Playstation3 i innymi urządzeniami zgodnymi z DLNA
# This is needed for PlayStation3 to work (among other devices)
USHARE_ENABLE_DLNA=yes

Po skonfigurowaniu uruchamiamy:

service ushare start chkconfig ushare on 

Gdy zachodzi potrzeba ponownego zindeksowania biblioteki multimediów z poziomu roota lub przez panel web należy ponownie wczytać bibliotekę.

service ushare reload

Wskazane w pliku konfiguracyjnym katalogi mogą być także katalogami sieciowymi. Można je zamontować automatycznie posługując się instrukcją automatycznego podpinania katalogów Samba wpisując odpowiednie hasła do fstab lub do pliku dostępnego tylko dla roota.

Skąd się biorą pliki w odpowiednim formacie?

To chyba najważniejsza część całego przedsięwzięcia. Pliki w odpowiednim formacie to podstawa całej zabawy z multimediami. O JPG, czy mp3 nie będę się rozpisywał, bo takie pliki może sobie zrobić każdy z wykorzystaniem Windows Media Playera lub iTunes na dowolnej platformie komercyjnej, a na platformie OpenSource jednym z dołączanych do (prawie) każdej dystrybucji programów.

A co z wideo? Tu zawsze są schody, szczególnie gdy oryginał materiału znajduje się na krążku DVD. Na potrzeby oglądania zakupionych filmów np. w podróży korzystam z programu Handbrake.
Jest to bardzo wygodna aplikacja, która pozwala zakodować źródło DVD lub MKV do formatu mpeg4, nałożyć napisy, przyciąć czarne obszary, przeskalować, nałożyć trwale napisy i zapamiętać podział na rozdziały. Pliki wygenerowane przez program bez problemu działają na konsoli oraz iPadzie.

Drugim programem do konwersji wideo może być np. MPEG Streamclip. Program pozwala skonwertować obsługiwane przez Quicktime (lub Quicktime alternative) materiały na format mpeg4, a także dokonać wstępnych cięć. Może także posłużyć do tworzenia wersji mobilnej na potrzeby telefonów komórkowych.

Oba programy są bezpłatne i dostępne na platformy MacOS oraz Windows. Z obu korzystam na platformie MacOS, trudno mi powiedzieć jak spisują się pod Windows, który do wersji 7 miał duże opory co do formatu mpeg4 i plików mp4/m4v.

Kolejnym bezpłatnym narzędziem jest program ffmpeg. Można pobrać go w postaci kodu źródłowego lub prekompilowanych bibliotek. Pod Linuxem np. z repozytorium Livna (dla Fedora Core). Dla OSX najłatwiej pobrać jest ffmpegx, a następnie kliknąć prawym klawiszem na ikonie programu, wybrać "wyświetl zawartość pakietu" i przegrać odpowiedni plik (ffmpeg).

Ponieważ nazwy kodeków pod różnymi systemami nieco się różnią posłużę się przykładami działającymi pod systemem Fedora Core. Użytkownicy innych systemów mogą skorzystać z polecenia ffmpeg i uzyskać stosowną pomoc. Kodowanie wideo/audio możliwe jest tylko wtedy, gdy przy kodeku znajduje się literka E.

 

ffmpeg -formats
FFmpeg version 0.5-rpmfusion, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: [...]
  libavutil     49.15. 0 / 49.15. 0 libavcodec    52.20. 0 / 52.20. 0 libavformat   52.31. 0 / 52.31. 0 libavdevice   52. 1. 0 / 52. 1. 0 libavfilter    0. 4. 0 /  0. 4. 0 libswscale     0. 7. 1 /  0. 7. 1 libpostproc   51. 2. 0 / 51. 2. 0 built on Oct 25 2009 21:36:58, gcc: 4.4.1 20090725 (Red Hat 4.4.1-2)
File formats:
....

Codecs: D A    aac             Advanced Audio Coding
 DEVSD  flv             Flash Video (FLV) D V D h264            H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 EA    libfaac         libfaac AAC (Advanced Audio Codec) D A    libfaad         libfaad AAC (Advanced Audio Codec) EA libmp3lame      libmp3lame MP3 (MPEG audio layer 3) EV libtheora       libtheora Theora EA libvorbis       libvorbis Vorbis EV libx264         libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 EV    libxvid         libxvidcore MPEG-4 part 2 D A mp3             MP3 (MPEG audio layer 3)
 DEVSDT mpeg4           MPEG-4 part 2 D V theora          Theora

Bitstream filters:
 text2movsub remove_extra noise mov2textsub mp3decomp mp3comp mjpegadump imxdump h264_mp4toannexb dump_extra
Supported file protocols:
 file: gopher: http: pipe: rtp: tcp: udp:
Frame size, frame rate abbreviations:
 ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif

Note, the names of encoders and decoders do not always match, so there are
several cases where the above table shows encoder only or decoder only entries
even though both encoding and decoding are supported. For example, the h263
decoder corresponds to the h263 and h263p encoders, for file formats it is even
worse.

 

Jak widać nie zawsze koder i dekoder mają tą samą nazwę. Dla przykładu pod MacOS 10.6 koder AAC nazywa się aac, pod Fedorą jest to libfaac. Trzeba zatem sprawdzić jak nazywa się koder pod używanym w danej chwili systemem i dystrybucją.

Przykładowe polecenia konwersji:

HD 720p 16:9

ffmpeg -i avatar-trailer.mp4 -vcodec mpeg4 -b 5000k -s 1280x720 -acodec libfaac -ab 128k avatar-trailer-720p.m4v

PAL 16:9

ffmpeg -i avatar-trailer.mp4 -vcodec mpeg4 -b 2500k -s 1024x576 -acodec libfaac -ab 128k avatar-trailer-pal.m4v

PAL 4:3

ffmpeg -i film.mp4 -vcodec mpeg4 -b 2500k -s 720x576 -acodec libfaac -ab 128k film-pal.m4v

Mobilny 16:9

ffmpeg -i avatar-trailer.mp4 -vcodec mpeg4 -b 700k -s 480x272 -acodec libfaac -ab 128k avatar-trailer-mobile.m4v

Mobilny 4:3

ffmpeg -i film.mp4 -vcodec mpeg4 -b 700k -s 432x320 -acodec libfaac -ab 128k film-mobile.m4v

* - tytuł nawiązuje do pytania Mariusza, który zastanawiał się, czy użytkowników ogarnia sieć czy oni ogarniają sieć. Ponieważ odpowiedziałem, że to ja ogarniam sieć, najwyższy czas, by dać temu wyraz.

Przydatne adresy

Komentarze