2016-05-16 18 views
5

Jestem trochę zdezorientowany, jak grać i nagrywać wideo/audio w systemie Android. I naprawdę nie rozumiem, w jakich sytuacjach należy korzystać z tych klas:mediacodec vs mediaplayer i mediarecorder

-Aby play: MediaPlayer vs MediaExtractor + MediaCodec

-to rekord: MediaRecorder vs MediaCodec + MediaMuxer

Kiedy mam użyć jednego lub innych? Przepraszam, jeśli to powtarzające się pytanie, myślę, że powinno to być powszechne, ale nie znalazłem żadnego.

Odpowiedz

5

Jeśli interfejsy wysokiego poziomu (MediaPlayer, MediaRecorder) mogą robić to, co chcesz (odtwarzaj wideo z formatu obsługiwanego przez system na wyświetlaczu lub nagrywaj wideo z kamery do pliku), powinieneś po prostu użyć one będą znacznie prostsze.

Jeśli chcesz zrobić coś bardziej niestandardowego, gdy zauważysz, że część łańcucha, którą chcesz zmodyfikować, jest ukryta w klasach wysokiego poziomu, będziesz chciał przejść do niższego poziomu. Na przykład. dla MediaExtractor; jeśli chcesz tylko wyodrębnić pakiety danych z pliku, ale nie dekodować i wyświetlać/odtwarzać je od razu, będziesz chciał użyć MediaExtractor. Jeśli chcesz odbierać pakiety z innych źródeł, których sam system nie obsługuje, będziesz chciał użyć MediaCodec bez MediaExtractor. Podobnie, jeśli chcesz nagrać coś innego niż aparat lub zapisać wynik w innym miejscu niż plik obsługiwany przez MediaRecorder, będziesz chciał użyć MediaCodec bezpośrednio zamiast MediaRecorder.

Należy również pamiętać, że klasy wysokiego poziomu również poprawiają się i stają się bardziej elastyczne dzięki nowszym wersjom API, umożliwiając robienie rzeczy, które wcześniej wymagały ręcznego korzystania z klas niższego poziomu. Na przykład. w systemie Android 5.0 MediaRecorder ma możliwość nagrywania z niestandardowej powierzchni, co pozwala nagrywać wideo z samego siebie, a nie tylko z aparatu. Było to wcześniej możliwe od 4,3 przy użyciu klas niższego poziomu.

Powiązane problemy