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?
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. –
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
Czy masz próbny link do sprawdzenia? –