GingerbreadとAppleのHTTPライブストリーミングサポートに関するMediaplayerフレームワーク
-
12-10-2019 - |
質問
リリースノートによると、StageFrightはGingerbreadリリースのOpenCoreフレームワークに取って代わります。 Android 2.3以降、AppleのHTTPライブストリーミングはデフォルトでサポートされているという議論が多数あるようです。さえ ウィキペディア これに言及しています。
しかし、私が実行しようとするとき テストストリーム Appleが使用して提供しています MediaPlayerDemo_Video.java
APIデモにバンドルされています私は次の例外を取得します:
setDataSource('http://devimages.apple.com/iphone/samples/bipbop/gear1/
prog_index.m3u8')
connect to devimages.apple.com:80/iphone/samples/bipbop/gear1/
prog_index.m3u8 @0
INFO/NuCachedSource2(34): ERROR_END_OF_STREAM
error (1, -2147483648)
ERROR/MediaPlayerDemo(667): error: Prepare failed.: status=0x1
java.io.IOException: Prepare failed.: status=0x1
at android.media.MediaPlayer.prepare(Native Method)
at
com.video.stream.MediaPlayerDemo_Video.playVideo(MediaPlayerDemo_Video.java:
125)
at
com.video.stream.MediaPlayerDemo_Video.surfaceCreated(MediaPlayerDemo_Video.java:
181)
...
surfaceChanged called
Displayed com.video.stream/.MediaPlayerDemo_Video: +1s652ms (total
+7s427ms)
GC_EXPLICIT freed 2K, 55% free 2514K/5511K, external 716K/1038K,
paused 183ms
GC_EXPLICIT freed 17K, 52% free 2782K/5767K, external 716K/1038K,
paused 87ms
GC_EXPLICIT freed 68K, 50% free 2972K/5895K, external 2544K/3109K,
paused 104ms
request time failed: java.net.SocketException: Address family not
supported by protocol
---関連するコード(Mediaplayerdemo_video.java):
path = "http://devimages.apple.com/iphone/samples/bipbop/gear1/
prog_index.m3u8";
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
質問:
1. Gingerbread Buildは、AppleのHTTPライブストリーミングプロトコルを本当にサポートしていますか?
2.上記は何が悪かったのですか?
助けてください。
解決
さて、私はいくつかのデータを見つけました、そして、私は自分の質問に答えることでこのスレッドを更新するつもりです。誰かが提案やその他の考慮事項をテーブルに持ち込むことがあれば、追加してください。
Stagefright
付属のフレームワークHoneycomb
サポートをビルドしますHTTP Live Streaming
. 。ドキュメントが読み取られます ドラフト仕様のほとんどの部分 どの部分に明示的に言及することなく。ビデオとオーディオは適合する必要があります Androidがサポートするメディア形式.
コンテンツで保護されたストリームを使用してプレイすることができました
AES-128
暗号化。しかし、エミュレータのパフォーマンス(残念ながら、私はデバイスを持っていませんでした)は良くありませんでした。オーディオとビデオは非常に同期していませんでした。ストリーミングアプリケーションは、実際のデバイスでテストする必要があります。HTTPSでデータをストリーミングすることはできません。また、 探知 ストリームがhttplive標準に適合することは、交換する必要があります
"http://"
とのURLの一部"httplive://"
他のヒント
Gingerbreadは、httplive://スキームプレフィックスを使用していくつかのHLSストリームの再生をサポートしていますが、サポートされているコーデックは非常に限られており、メディアフレームワークをクラッシュさせて再生できない完全に有効なストリームを構築するのは非常に簡単です。
私の経験では、このクラッシュは、暗号化されたコンテンツであっても、最初のセグメントのロードまたはデコード中に通常発生することが示されていますが、キーが要求されず、フレームワークがキーラインを無視していることを示唆しています。
もちろん、市場で非常に最新のデバイスをサポートする必要がある人のために、ICSのHLSのサポートは合理的であるように見えますが(まだ不完全ですが)、何らかの後方互換性を必要とする私たちは明らかに寒さに残されています。そして、それは(プログレッシブダウンロードとは対照的に)ストリーミングの唯一のオプションはRTSPであり、それ自体がAndroidであまり不十分です。