Currently Browsing: linux

MP4Box – Konwersja filmów z kontenera FLV na MP4

Wojtek opisał dziś na swoim blogu fajny skrypt do „Pobierania dowolnych filmów z Vimeo„. Skrypt działa dobrze, pobiera filmy w maksymalnej jakości, jednakże wynik zapisuje w kontenerze FLV. Pobierane filmy są oczywiście zakodowane kodekiem H264, więc bez utraty jakości, można je szybko przerobić na kontener MP4.

Zdarza mi się od czasu do czasu pobrać film zapisany jako FLV i zawsze konwertuję go sobie na MP4. Lubię proste konsolowe narzędzia, które dają mi pełną kontrolę nad całym procesem. Dlatego też, używam opensource’owego programu MP4Box z pakietu GPAC. Na stronie tego projektu można pobrać skompilowane paczki pod wszelkie platformy.

Zanim przystąpimy do konwersji należy wyświetlić informacje o ścieżkach, które zawiera pobrany plik.

MP4Box -info 31733477-hd.flv
Track # 1 Info - TrackID 1 - TimeScale 30000 - Duration 00:05:04.033
Media Info: Language "Undetermined" - Type "vide:avc1" - 9121 samples
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 1280 x 520 - Profile High @ Level 3.1
NAL Unit length bits: 32
Pixel Aspect Ratio 1:1 - Indicated track size 1280 x 520
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 44100 - Duration 00:05:04.088
Media Info: Language "Undetermined" - Type "soun:mp4a" - 13096 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 44100
Synchronized on stream 1

Następnie wypakowujemy kolejno interesujące nas ścieżki:

MP4Box -raw 1 31733477-hd.flv
MP4Box -raw 2 31733477-hd.flv

Zostaną utworzone 2 pliki z obrazem:

31733477-hd_track1.h264

oraz z dźwiękiem:

31733477-hd_track2.aac

Ostatnim krokiem jest zapisanie powyższych ścieżek w pliku MP4:

MP4Box -add 31733477-hd_track1.h264 -add 31733477-hd_track2.aac -isma 31733477-hd.mp4

Cała procedura trwa kilka sekund, a obraz i dźwięk pozostają nienaruszone. Plik wynikowy natomiast jest w pełni kompatybilny m.in. z iPhone czy iPadem.

XBMC 11.0 Eden beta1 z wbudowanym wsparciem AirPlay

W Wigilię pojawiła się nowa wersja używanego przeze mnie media center XBMC 11.0 „Eden” beta1. Względem poprzedniej wersji (10.1 „Dharma”) poszerzono obsługę napisów, wreszcie odtwarzacz obsługuje tagi do formatowania tekstu, kroju czy kolorów dla formatów MicroDVD/MPL2 czy SRT. Poczyniono również całą masę poprawek dotyczących obsługi Blu-Ray’a, wg changelog‘a można je odtwarzać również bezpośrednio z plików ISO. Najważniejsza zmiana z punktu widzenia użytkownika sprzętu Apple to wbudowana obsługa technologii Airplay, nie potrzeba już – używanych przeze mnie do tej pory – osobnych pluginów. Teraz wszystko jest w kompilowane w XBMC i działa sprawniej – streamingi szybciej się uruchamiają. Działa streamowanie samego audio np. z iTunes, wideo i zdjęć. Brakuje jeszcze tylko wsparcia mirroringu z iPada 2/iPhone 4S.

Play2Wifi – AirPlay z iPada 2 na XBMC

Od dłuższego czasu jako głównego odtwarzacza multimediów używam XBMC. Mam pod niego dedykowany linuksowy (Ubuntu) box na dwurdzeniowym Atomie 330 z kartą graficzną GF9400. Dzięki wspomaganiu sprzętowemu (VDPAU) radzi sobie z wszelkimi plikami multimedialnymi również w 1080p.

Kilka dni temu nabyłem iPada 2. Bardzo ciekawą funkcją jest technologia AirPlay, czyli bezprzewodowe przesyłanie filmów i muzyki pomiędzy urządzeniami Apple. Wygląda to tak, że przeglądając internet na iPadzie, możemy pojedynczym kliknięciem przenieść dany materiał wideo np. na Apple TV, aby zobaczyć go na dużym ekranie.

Dzisiaj przeglądając internet natknąłem się na projekt Play2Wifi, który implementuje tę technologię w odtwarzaczu XBMC. Postanowiłem sprawdzić jak to działa, dorzuciłem to do mojego media center. W obecnej formie nie radzi sobie jeszcze z materiałami z YouTube, nie działa również ale działa przewijanie. Jest to bardzo wczesna wersja, ale pomimo tego projekt wydaje się bardzo obiecujący. Jest na licencji OpenSource, więc jest nadzieja, że się rozwinie. Przydałaby się również taka otwarta implementacja AirPrinta.

Poniżej krótkie wideo z mojego testu (sorry za pociąganie nosem, ale jestem koszmarnie przeziębiony).

UPDATE:

Nie dawało mi spokoju to, że YouTube nie działa. Zacząłem szukać dalej i natrafiłem na kolejny projekt – Airplayer, który jest bardziej zaawansowany. Sprawdziłem i na chwilę obecną obsługuje bez problemu YouTube jak również AirPlay w innych aplikacjach z AppStore, a nawet pokazy zdjęć z iPada. Niestety nie działa jeszcze w nim streaming muzyki.

Bardzo współdzielony hosting miniCloud z OVH

Dzięki uprzejmości Jakuba Furmana miałem nieprzyjemność przyjrzeć się najnowszej ofercie hostingowej firmy OVH w technologii Cloud Computing. Więcej oficjalnych informacji możecie znaleźć na ich stronie.
Usługa w założeniu (również cenowo) ma być czymś pomiędzy serwerem wirtualnym (shared) a prywatnym (RPS – dedykowany serwer z współdzieloną przestrzenią dyskową).
O usługach firmy OVH pisał Mateusz matipl Kamiński na swoim blogu OVH: RPS czy lepiej dedyk?. Cloud Computing w wykonaniu OVH jest oparty na oprogramowaniu VMware. O ile testowany przez Mateusza RPS nie zachwycał, to sam nie wiem dla kogo jest usługa miniCloud.

W wersji testowej miniCloud dostajemy do dyspozycji 1 współdzielony rdzeń procesora,

CPU: Physical Processor ID: 0
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 256K
CPU: L3 cache: 4096K
CPU0: Intel(R) Xeon(R) CPU E5504 @ 2.00GHz stepping 05
Brought up 1 CPUs
Total of 1 processors activated (3990.00 BogoMIPS).
TSC freq read from hypervisor : 1995.000 MHz
Detected 1995.000 MHz processor.

2 GB, podejrzewam, że również współdzielonej pamięci RAM,

Memory: 2054228k/2097152k available (10840k kernel code, 41028k reserved, 642k data, 444k init, 1187720k highmem)

oraz wycinek współdzielonej przestrzeni dyskowej o wielkości 5GB,

scsi0 : ioc0: LSI53C1030 B0, FwRev=01032920h, Ports=1, MaxQ=128, IRQ=17
scsi 0:0:0:0: Direct-Access VMware Virtual disk 1.0 PQ: 0 ANSI: 2
target0:0:0: Beginning Domain Validation
target0:0:0: Domain Validation skipping write tests
target0:0:0: Ending Domain Validation
target0:0:0: FAST-40 WIDE SCSI 80.0 MB/s ST (25 ns, offset 127)
sd 0:0:0:0: [sda] 10485760 512-byte logical blocks: (5.36 GB/5.00 GiB)

to wszystko wpięte do ich sieci, prawdopodobnie również współdzielonego łącza 10/100Mbit ze stałym niewspółdzielonym publicznym adresem IP.

W praktyce dostajemy serwer z własnym publicznym adresem IP, mamy pełną kontrolę nad konfiguracją systemu, możemy uruchomić na nim dowolne usługi. Niestety na tym kończą się zalety tej oferty. Wydajność zależy od tego co na swoich serwerach robią nasi „sąsiedzi”. Poza 5GB przestrzeni dyskowej nic innego nie jest gwarantowane.

Wydajność dysku konta, które testowałem była przeciętna.

/dev/sda1:
Timing cached reads: 5684 MB in 2.00 seconds = 2842.66 MB/sec
Timing buffered disk reads: 128 MB in 5.51 seconds = 23.24 MB/sec

Natomiast wydajność WWW (Debian/Apache2/mod_php5/MySQL), strona oparta na WordPressie:

Maximum connect burst length: 1

Total: connections 5 requests 10 replies 10 test-duration 101.368 s

Connection rate: 0.0 conn/s (20273.6 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 3954.4 avg 20273.6 max 41364.4 median 15760.5 stddev 14426.6
Connection time [ms]: connect 1.3
Connection length [replies/conn]: 2.000

Request rate: 0.1 req/s (10136.8 ms/req)
Request size [B]: 68.0

Reply rate [replies/s]: min 0.0 avg 0.1 max 0.3 stddev 0.1 (17 samples)
Reply time [ms]: response 9910.1 transfer 226.1
Reply size [B]: header 482.0 content 32497.0 footer 2.0 (total 32981.0)
Reply status: 1xx=0 2xx=10 3xx=0 4xx=0 5xx=0

CPU time [s]: user 6.82 system 29.18 (user 6.7% system 28.8% total 35.5%)
Net I/O: 3.2 KB/s (0.0*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

Testowana strona otwierała się w tempie modemowym. Rozumiem, że usługa jest wciąż testowana, może trafiłem na jakiś felerny serwer, może finalnie sytuacja będzie zupełnie odmienna od obecnej.

Moim zdaniem takie współdzielone serwery nadają się jedynie do nauki czy testów. Nie postawiłbym tam niczego co miałoby być dostępne publicznie, bo taka usługa nie gwarantuje jakiejkolwiek wydajności.

VMware Server 2.0.2 i najnowsze Linuksy

Moje przygody z wirtualizacją zaczęły się kilka lat temu. Głównie wykorzystuję te narzędzie do celów testowo-edukacyjnych. Zanim popsuję jakiś system produkcyjny, mogę eksperymentować na swoim własnym poligonie.
Z myślą o Tym 2 lata temu, gdy modernizowałem swój domowy serwer, szarpnąłem się na czterordzeniowy procesor, większą ilość pamięci i kilka dysków w RAIDzie, aby mieć zapas mocy. Korzystam z linuksowej wersji darmowego VMware Server’a 2.0. Przez ostatni rok miałem mało czasu na zabawy, a po którejś aktualizacji jądra VMware przestał działać. Kilka dni temu postanowiłem go reanimować. Niestety okazało się, że od października 2009 nie ma aktualizacji, a co za Tym idzie brak oficjalnego wsparcia dla wersji kernela 2.6.3x.

Z pomocą przyszła społeczność OpenSource, Radu Cotescu napisał patcha dla kerneli 2.6.3x i skrypt instalacyjny, dla nowszych dystrybucji Ubuntu, Fedora i openSUSE. Więcej na ten temat w notce na jego blogu. Natomiast sam skrypt można pobrać bezpośrednio ze strony, jak również z repozytorium Git autora.
Korzystam z Debiana (squeeze/sid) – kernel 2.6.32, więc musiałem ręcznie przepakować, spatchować źródła modułów, aby uzyskać zgodność z moim systemem.

W tym celu należy pobrać ostatnią dostępną wersję VMware Server 2.0.2 w formie archiwum tar.gz – VMware-server-2.0.2-203138.i386.tar.gz oraz najnowszego patcha vmware-server-2.0.2-203138-update.patch

$ wget http://codebin.cotescu.com/vmware/vmware-server-2.0.2-203138-update.patch

Rozpakowujemy instalkę:

$ tar -xzf VMware-server-2.0.2-203138.i386.tar.gz

Przechodzimy do folderu ze źródłami modułów i wypakowujemy je:

$ cd vmware-server-distrib/lib/modules/source/
$ tar -xf vmci.tar
$ tar -xf vmmon.tar
$ tar -xf vmnet.tar
$ tar -xf vsock.tar

Następnie cofamy się do folderu vmware-server-distrib/ i patchujemy źródła:

$ cd ../../../
$ patch -p1 < ../VMware-server-2.0.2-203138-update.patch

Wracamy do źródeł i kasujemy archiwa ze źródłami i tworzymy nowe:

$ cd lib/modules/source/
$ rm -f vmci.tar
$ rm -f vmmon.tar
$ rm -f vmnet.tar
$ rm -f vsock.tar
$ tar -cf vmci.tar vmci-only/
$ tar -cf vmmon.tar vmmon-only/
$ tar -cf vmnet.tar vmnet-only/
$ tar -cf vsock.tar vsock-only/

Kolejny powrót do głównego katalogu vmware-server-distrib/ i uruchomienie instalacji jako root:

$ cd ../../../
$ sudo ./vmware-install.pl

Po tym zabiegu instalacja zakończyła się pomyślnie.

Jednakże, po uruchomieniu okazało się, że nie działa webowa konsola administracyjna.
Po wywołaniu jej domyślnego adresu: http://adres_ip_hosta:8222/ serwer przekierował mnie na SSLowy port https://adres_ip_hosta:8333/, gdzie ukazał się komunikat o błędzie 503 Service Unavailable.

Po analizie problemu okazało się, że źródło problemu leżało w załączonym Tomcacie, który nie chciał nasłuchiwać na IPv6.

Zastosowałem obejście, wymusiłem nasłuch konsoli webowej na IPv4, w tym celu trzeba dokonać zmian w pliku startowym VMware – /etc/init.d/vmware.

Odnajdujemy następującą sekcję:

# Web Access configuration
webAccess="${vmdb_answer_LIBDIR}/webAccess/java/jre1.5.0_15/bin/webAccess"
watchdog="${vmdb_answer_BINDIR}/vmware-watchdog"
webAccessServiceName="VMware Virtual Infrastructure Web Access"
CATALINA_HOME="${vmdb_answer_LIBDIR}/webAccess/tomcat/apache-tomcat-6.0.16"
webAccessOpts="-client -Xmx64m -XX:MinHeapFreeRatio=30 -XX:MaxHeapFreeRatio=30
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs=$CATALINA_HOME/common/endorsed
-classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-logging-api.jar
-Dcatalina.base=$CATALINA_HOME -Dcatalina.home=$CATALINA_HOME
-Djava.io.tmpdir=$CATALINA_HOME/temp org.apache.catalina.startup.Bootstrap"

A następnie do webAccessOpts dopisujemy parametr -Djava.net.preferIPv4Stack=true

webAccessOpts="-client -Xmx64m -XX:MinHeapFreeRatio=30 -XX:MaxHeapFreeRatio=30
-Djava.net.preferIPv4Stack=true
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs=$CATALINA_HOME/common/endorsed
-classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-logging-api.jar
-Dcatalina.base=$CATALINA_HOME -Dcatalina.home=$CATALINA_HOME
-Djava.io.tmpdir=$CATALINA_HOME/temp org.apache.catalina.startup.Bootstrap"

Uważam, że VMware Server jest najlepszym darmowym rozwiązaniem tego typu. Mam nadzieję, że projekt nie został porzucony i wkrótce będzie dostępna oficjalna aktualizacja.

Na koniec jeszcze taki „tips and tricks”, dopisanie poniższych 3 linijek w pliku .vmx przed uruchomieniem wirtualnej maszyny, aktywuje dostęp do niej po protokole VNC i umożliwia to podgląd od początku jej bootowania, coś ala KVM over IP. Szczególnie przydatne jeśli korzystamy z Mac OS X, gdzie pluginy przeglądarkowe nie działają.

RemoteDisplay.vnc.enabled = "TRUE"
RemoteDisplay.vnc.password = "hasełko"
RemoteDisplay.vnc.port = "5900"

« Previous Entries