2017-05-28 10 views
10

J'ai une application utilisant MediaPlayer qui fonctionne bien lorsque je diffuse des fichiers MP3 à téléchargement progressif. J'ai essayé d'utiliser cette même application pour télécharger des fichiers AAC de téléchargement de progrès. Et il joue bien les fichiers. Ce qui ne fonctionne pas, c'est quand j'essaie de passer dans le flux en utilisant MediaPlayer.seekTo() avec AAC. Cela fonctionne à nouveau bien en mp3. Pour le flux AAC, il redémarre simplement en jouant à zéro.Comment rendre AAC accessible via le flux http à l'aide d'Android MediaPlayer?

Mon sentiment est que le codage est lié. Ce fichier AAC n'a pas été configuré correctement pour diffuser.

est ici la sortie de l'outil 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 

Vous remarquerez qu'il est vraiment un fichier vidéo avec audio AAC et aucune vidéo réelle inclus. Si tel est le cas, je me suis dit qu'il a besoin de plus de métadonnées pour savoir où jouer quand je demande une partie du flux qui peut ou ne peut pas être chargé. De plus, les vidéos ont besoin d'images clés pour savoir où jouer. Je pense donc qu'aucune image clé ou case d'indication n'est incluse dans le flux/fichier.

Je n'ai pas eu de chance de trouver de vrais détails sur ce qui manque ou si c'est possible ou non. J'ai testé cela sur d'autres versions et il semble qu'avant 5.0.2 cela a fonctionné. Après 5.0.2 cela ne fonctionne pas. Je n'ai trouvé aucun détail sur ce qui a changé dans cette version. Cela peut être soit un problème de codage de flux qui ne nous permet pas de diffuser ce fichier sur un flux http (s) à téléchargement progressif. Ou, il pourrait être un bug dans Android Media Player créé autour de la période de temps 5.0.2. Ou ça pourrait être les deux.

Pourquoi cela ne fonctionne-t-il pas?

+0

MP3 fonctionne parce que vous obtenez des cadres MP3 (chacun est quelques millisecs de son), donc vous n'avez qu'à passer les images à chercher. AAC est également des cadres (si vous ne mettez pas à l'intérieur du conteneur). Je ne suis pas très familier avec Android SDK mais je suis sûr que vous pouvez envoyer des octets d'images au décodeur SDK. Je vais étudier quelques options. –

+0

Je recevais des messages mitigés sur le support d'ADTS dans le lecteur d'Android, donc je ne suis pas sûr que ça marche ou pas. J'ai hâte d'entendre ce que vous avez découvert. – chubbsondubs

+0

Avez-vous un exemple de lien de flux pour vérification? –

Répondre

1

Essayez avec Exoplayer, il est si simple

ExoPlayer a un certain nombre d'avantages par rapport Android construit dans MediaPlayer:

  • Prise en charge dynamique Adaptive streaming sur HTTP (DASH) et SmoothStreaming, ni dont sont pris en charge par MediaPlayer (il prend également en charge HTTP Live Streaming (HLS), MP4, MP3, WebM, M4A, MPEG-TS et AAC).
  • Prise en charge des fonctionnalités HLS avancées, telles que la gestion correcte des balises # EXT-X-DISCONTINUITY.
  • La possibilité de personnaliser et d'étendre le lecteur en fonction de votre cas d'utilisation. ExoPlayer est conçu spécifiquement dans cet esprit et permet de remplacer de nombreux composants par des implémentations personnalisées.
  • Mettez facilement à jour le lecteur avec votre application. Parce que ExoPlayer est une bibliothèque que vous incluez dans votre application apk, vous avez le contrôle sur la version que vous utilisez et vous pouvez facilement mettre à jour vers une version plus récente dans le cadre d'une mise à jour régulière de l'application. Existe-t-il une sortie de flux en tant que AAC brut (avec l'en-tête ADTS) au lieu de l'audio contenu dans M4A/MP4?
+0

C'était l'autre option, mais je suis vraiment intéressé par une réponse sur le support de streaming AAC dans Android SDK. Je sais que je pourrais déchirer mon code existant et essayer de le remplacer par quelque chose, mais échanger le diable que vous connaissez pour le diable vous ne répondez pas vraiment à ma question sur le streaming. – chubbsondubs

+0

Oui, c'est une solution optionnelle et alternative pour le streaming. Je suis désolé pour votre intention. –