2016-09-28 29 views
8

Pracuję nad aplikacją do czatowania, taką jak whatsApp, chcę transkodować plik multimedialny przed przesłaniem na serwer, przeszedłem przez wiele linków, ale nie jestem w stanie zdecydować, która metoda powinienem używać, czy istnieje jakiś prosty sposób transkodowania w systemie Android?Transkodowanie pliku audio/wideo/obrazu w urządzeniu z Androidem

  • FFMPEG znalazłem to bardzo obciąża CPU proces, będzie zużywać więcej energii

  • Multimedia Codec chcę wykonać transkodowanie przy użyciu mediacodec ale nie jest w stanie uzyskać odpowiednie kroki w celu zrozumieć proces.

Best link to give idea about transcoding

Library to transcode using media codec (Ma wiele błędów)

Odpowiedz

1

Zastosowaliśmy obie implementacje do naszej aplikacji do edycji wideo. Zasadniczo zastosowaliśmy implementację MediaCodec, jeśli wersja Androida> = 4.3 i w inny sposób używamy FFMPEG.

Problem z użyciem FFMPEG:

  1. jak pan powiedział, cpu intensywny proces ten sposób zużywa więcej baterii
  2. x264 koder jest na licencji GPL, więc warto korzystać OpenH264 enkoder zamiast które obsługują tylko Baseline profil, więc jakość obrazu jest nie najlepszy
  3. Ponieważ wykorzystywane oprogramowanie kodera, szybkość przetwarzania jest stosunkowo powolny, przynajmniej w porównaniu do wykonania MediaCodec

MediaCodec mają również pewne wady, choć na przykład:

  1. Jeśli chcesz zrobić transkodowanie, android wersja muszą być> = 4,3, chyba że chcesz do czynienia z formatu kolor przemiany siebie, która jest całkowicie bałagan, ponieważ każdy dostawca może mieć własną implementację formatu kolorów. (Od wersji 4.3 obsługa kodowania MediaCodec za pomocą powierzchni wejściowej)
  2. Enkoder sprzętowy może zachowywać się inaczej w różnych modelach. (Na przykład niektóre koder może produkuje ramek B, które nie są jeszcze obsługiwane przez Android MediaMuxer, więc może chcesz używać ffmpeg do części muksowania)

Więc muszę powiedzieć, jeśli tylko obsługują nowy android, należy użyj mediacodec, ale jeśli chcesz być bezpieczny (łatwiej napisać kod, który działa na każdym urządzeniu) i nie masz nic przeciwko wydajności, użyj FFMPEG z OpenH264

0

Android MediaCodec jest stosunkowo lepsza droga do transkodowania na kliencie, ponieważ używa własnego przetwarzanie bufora niskim poziomie. Ale wtedy nie zapewnia skomplikowanej swobody, jak robi to FFMpeg. Co do kodu źródłowego MediaCodec, procesor jest intensywnie wykorzystany do przechowywania buforów i ich przetwarzania, ale w rzeczywistości jest mniejszy niż FFmpeg.