2017-05-28 7 views
10

プログレッシブダウンロードMP3をストリーミングするときにうまく動作するMediaPlayerを使用しているアプリがあります。私はAACファイルのダウンロードを進めるために同じアプリを使用しようとしました。そしてそれはファイルをうまく再生します。動作しないのは、AACでMediaPlayer.seekTo()を使用してストリーム内をスキップしようとするときです。これはmp3でもうまくいきます。 AACストリームの場合、再生はゼロで再生を再開します。Android MediaPlayerを使用してhttpストリーム経由でAACをシークできますか?

私の気持ちはエンコード関連です。そのAACファイルはストリームに正しく設定されていません。ここで

は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 

あなたはそれが本当にAACオーディオとビデオファイルだと本当のビデオが含まれていませんがわかります。その場合、ロードされているかもしれない、あるいはロードされていないストリームの一部を求めるときに、再生する場所を知るためにメタデータが必要になると考えました。また、ビデオはどこから再生するかを知るためにキーフレームが必要ですので、キーフレームやヒントボックスはストリーム/ファイルに含まれていないと思います。

私は、何が欠けているか、またはこれが可能かどうかについての実際の詳細を見つけるのに運がなかった。私はこれを他のバージョンでテストしましたが、5.0.2より前のバージョンではうまくいきました。 5.0.2以降は動作しません。そのバージョンで何が変更されたかについての詳細は見つかりませんでした。

これは、このファイルをプログレッシブダウンロードのHTTPストリームでストリーミングすることを許可しないストリームエンコードの問題である可能性があります。あるいは、5.0.2周间に作成されたAndroid Media Playerのバグかもしれません。それとも、両方の可能性があります。

なぜこれが機能しないのですか?

+0

M4A/MP4に含まれているオーディオではなく、生のAAC(ADTSヘッダー付き)としてストリーム出力することはできますか?あなたがMP3フレームを取得するのでMP3が機能しています(それぞれ数ミリ秒の音です)ので、シークするためにフレームをスキップするだけです。 AACもフレームです(コンテナの中に入れない場合)。私はAndroid SDKにあまり慣れていませんが、フレームのバイトをSDKデコーダに送信できると確信しています。私はいくつかのオプションを調査します。 –

+0

AndroidのプレイヤーでADTSのサポートを受けてメッセージが混ざっていたので、正しく動作するかどうかはわかりません。私は、あなたが見つけたものを聞くのを楽しみにしています。 – chubbsondubs

+0

チェックのためのサンプルストリームリンクがありますか? –

答えて

1

ExoPlayerはMediaPlayerの中に組み込まれてAndroidのより多くの利点があるので、簡単です、Exoplayerで試してみてください:HTTP経由のダイナミックアダプティブストリーミング用

  • サポート(DASH)とSmoothStreaming、どちらのをMediaPlayer(HTTPライブストリーミング(HLS)、MP4、MP3、WebM、M4A、MPEG-TS、AACもサポート)によってサポートされています。
  • #EXT-X-DISCONTINUITYタグの正しい処理など、高度なHLS機能をサポートしています。
  • ユースケースに合わせてプレーヤーをカスタマイズして拡張する機能。 ExoPlayerはこれを念頭に置いて特別に設計されており、多くのコンポーネントをカスタム実装に置き換えることができます。
  • アプリケーションと共に簡単にプレーヤーを更新します。 ExoPlayerはアプリケーションapkにインクルードするライブラリであるため、使用するバージョンを制御でき、通常のアプリケーション更新の一部として新しいバージョンに簡単に更新できます。
+0

それはもう一つの選択肢でしたが、私は本当にAndroid SDKのAACストリーミングサポートについての答えに興味があります。私は自分の既存のコードを取り除いて何かに置き換えようと思っていますが、実際にストリーミングに関する私の質問に答えていない悪魔のためにあなたが知っている悪魔を取引します。 – chubbsondubs

+0

はい、ストリーミングのためのオプションの代替ソリューションです。あなたの意思をお詫びします。 –

関連する問題