次のコードを使用して、URL からビデオを再生します。最初にビデオをダウンロードしてからそのビデオを再生することを除いて、正常に動作します
Uri uri = Uri.parse(URL);
video.setVideoURI(uri);
video.start();
しかし、ライブビデオをダウンロードしてから再生するのではなく、ストリーミングしたい
次のコードを使用して、URL からビデオを再生します。最初にビデオをダウンロードしてからそのビデオを再生することを除いて、正常に動作します
Uri uri = Uri.parse(URL);
video.setVideoURI(uri);
video.start();
しかし、ライブビデオをダウンロードしてから再生するのではなく、ストリーミングしたい
ストリーミングが機能するには、いくつかの要件があります。
ファイルが「正しく」エンコードされていない可能性があります
http://developer.android.com/guide/appendix/media-formats.html
HTTP または RTSP 経由でストリーミングされるビデオ コンテンツの場合、追加の要件があります。
- 3GPP および MPEG-4 コンテナーの場合、
moov
アトムはどのmdat
アトムよりも前にある必要がありますが、ftyp
アトムの後にある必要があります。- 3GPP、MPEG-4、および WebM コンテナーの場合、同じタイム オフセットに対応するオーディオ サンプルとビデオ サンプルの間隔は 500 KB を超えてはなりません。このオーディオ/ビデオのドリフトを最小限に抑えるには、オーディオとビデオを小さなチャンク サイズでインターリーブすることを検討してください。
サポートしていない古いバージョンの Android を使用している可能性があります
HTTP プログレッシブ ストリーミングは 2.2 でのみ追加され、HTTPS は 3.0+ でのみサポートされ、ライブ ストリーミングはそれ以降のバージョンでのみサポートされます。
バッファリングを表示するにprogressbar
はProgressDialog
、...ここにバッファリング用に投稿する必要がありprogressDialog
ます...
pDialog = new ProgressDialog(this);
// Set progressbar message
pDialog.setMessage("Buffering...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
// Show progressbar
pDialog.show();
try {
// Start the MediaController
MediaController mediacontroller = new MediaController(this);
mediacontroller.setAnchorView(mVideoView);
Uri videoUri = Uri.parse(videoUrl);
mVideoView.setMediaController(mediacontroller);
mVideoView.setVideoURI(videoUri);
} catch (Exception e) {
e.printStackTrace();
}
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new OnPreparedListener() {
// Close the progress bar and play the video
public void onPrepared(MediaPlayer mp) {
pDialog.dismiss();
mVideoView.start();
}
});
mVideoView.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if (pDialog.isShowing()) {
pDialog.dismiss();
}
finish();
}
});