2017-05-28 47 views
10

Mam aplikację korzystającą z MediaPlayer, która działa poprawnie, gdy przesyłam strumieniowo pliki MP3 do pobrania progresywnego. Próbowałem użyć tej samej aplikacji do przesyłania strumieniowego plików AAC do pobrania. I dobrze odtwarza pliki. To, co nie działa, to próba pomijania się w strumieniu za pomocą MediaPlayer.seekTo() z AAC. To znowu działa dobrze w formacie mp3. Dla strumienia AAC po prostu ponownie uruchamia się przy zerowej wartości.Jak uczynić AAC dostępnym poprzez strumień http za pomocą Android MediaPlayer?

Mam przeczucie, że kodowanie jest powiązane. Ten plik AAC nie został poprawnie skonfigurowany do przesyłania strumieniowego.

Tutaj jest wyjście z narzędzia MediaInfo:

Size: 2.3 MB 
Format: QuickTime/MPEG-4/Motion JPEG 2000 format 
Stream count: 2 
Duration: 00:05:02 
Bit rate: 64 kb/s 
Meta info: 
    album_artist: Red Hot Chili Peppers 
    album: The Getaway 
    minor_version: 512 
    encoder: Lavf57.41.100 
    title: Dark Necessities 
    major_brand: M4V 
    track: 2 
    disc: 1 
    compatible_brands: isomiso2avc1 
    artist: Red Hot Chili Peppers 
    copyright: 2016 Warner Bros. Records Inc. 
    genre: Alternative 

Stream 0 
Type: video 
Codec: h264 
Codec profile: High 10 
FourCC: avc1 
Duration: 00:00:00 
Width: 350 
Height: 350 
Sample aspect ratio: 1:1 
Display aspect ratio: 1:1 
Pixel format: yuv420p10le 
Frame rate: 90000 fps 
Meta info: 
    handler_name: VideoHandler 
    language: und 

Stream 1 
Type: audio 
Codec: aac 
FourCC: mp4a 
Duration: 00:05:02 
Bit rate: 64 kb/s 
Sample rate: 44100 Hz 
Sample format: s16 
Channel: 2 
Meta info: 
    handler_name: SoundHandler 
    language: und 

Zauważysz to naprawdę plik wideo z dźwiękiem AAC a nie rzeczywistym wideo włączone. Jeśli tak, to pomyślałem, że potrzebuje więcej metadanych, aby wiedzieć, gdzie grać, gdy pytam o część strumienia, która może być załadowana lub nie. Również filmy wymagają klatek kluczowych, aby wiedzieć, gdzie grać, więc nie wierzę, że w strumieniu/pliku nie znajdują się żadne klatki kluczowe ani pola podpowiedzi.

Nie miałem szczęścia w znalezieniu prawdziwych szczegółów na temat tego, czego brakuje, a jeśli to możliwe, czy nie. Przetestowałem to w innych wersjach i wydaje się, że przed 5.0.2 działało. Po wersji 5.0.2 nie działa. Nie znalazłem żadnych szczegółów na temat tego, co zmieniło się w tej wersji.

Tak więc może to być problem z kodowaniem strumienia, który nie pozwala na przesyłanie strumieniowe tego pliku do strumienia http (ów) progresywnego pobierania. Lub może to być błąd w programie Android Media Player utworzony w czasie około 5,0.2. Lub może to być jedno i drugie.

Dlaczego to nie działa?

+0

Czy mimo to strumień jest przesyłany jako surowy AAC (z nagłówkiem ADTS) zamiast dźwięku zawartego w M4A/MP4? MP3 działa, ponieważ dostajesz ramki MP3 (każdy ma kilka milliseów dźwięku), więc po prostu pomijasz klatki, aby szukać. AAC to także ramki (jeśli nie umieszczasz w pojemniku). Nie jestem zbyt zaznajomiony z Androidem SDK, ale jestem pewien, że możesz wysłać bajty klatek do dekodera SDK. Zbadam niektóre opcje. –

+0

Otrzymywałem mieszane wiadomości na temat wsparcia ADTS w odtwarzaczu Android, więc nie jestem do końca pewien, czy działa, czy nie. Czekam z niecierpliwością na to, co się dowiedziałeś. – chubbsondubs

+0

Czy masz próbny link do sprawdzenia? –

Odpowiedz

1

Spróbuj z Exoplayer, to jest tak proste

ExoPlayer posiada szereg zalet w stosunku do Androida wbudowanego w MediaPlayer:

  • Wsparcie dla MPEG-DASH (DASH) i SmoothStreaming, z których żaden są obsługiwane przez MediaPlayer (obsługuje również HTTP Live Streaming (HLS), MP4, MP3, WebM, M4A, MPEG-TS i AAC).
  • Obsługa zaawansowanych funkcji HLS, takich jak poprawna obsługa tagów # EXT-X-DISCONTINUITY.
  • Możliwość dostosowania i rozszerzenia odtwarzacza w zależności od przypadku użycia. ExoPlayer został zaprojektowany specjalnie z myślą o tym i umożliwia zastąpienie wielu komponentów niestandardowymi implementacjami.
  • Łatwo aktualizuj odtwarzacz wraz z aplikacją. Ponieważ ExoPlayer jest biblioteką dołączoną do apk aplikacji, masz kontrolę nad wersją, której używasz i możesz łatwo zaktualizować ją do nowszej wersji w ramach zwykłej aktualizacji aplikacji.
+0

To była druga opcja, ale naprawdę interesuje mnie odpowiedź na temat obsługi przesyłania strumieniowego AAC w pakiecie Android SDK. Wiem, że mogę zgrać mój istniejącego kodu i spróbować zastąpić je czymś, ale handel diabła znasz diabłu naprawdę nie nie odpowiada na moje pytanie o streamingu. – chubbsondubs

+0

tak, to opcjonalne i alternatywne rozwiązanie do przesyłania strumieniowego. Przykro mi z powodu twojej intencji. –