0

Android アプリケーションで Media Player を使用しています。http リンクからの動画は Android のすべてのバージョンで再生されますが、https リンクは Android 4.1.2 でのみ再生されますが、それ以前のバージョンでは再生されません。次のエラーを表示しています..

java.io.IOException: Prepare failed.: status=0x1 Error(1,-18).

次のコードを使用しています

   MediaPlayerplayer = new MediaPlayer();
    player.setOnPreparedListener(this);
player.setOnCompletionListener(this);
player.setOnBufferingUpdateListener(this);
player.setOnSeekCompleteListener(this);
player.setScreenOnWhilePlaying(true);
player.setDisplay(holder);

    try {
String videoUrl = getIntent().getExtras().get("url").toString();
    File mediaFile = new File(fileName);
if (mediaFile.exists()) {
    FileInputStream fi = new FileInputStream(mediaFile);
    player.setDataSource(fi.getFD());                   
    }
else{
    player.setDataSource(videoUrl);
}
4

3 に答える 3

2

これを試してください

  try {
        setContentView(R.layout.videodisplay);
        String link="Yourvideo link";
        VideoView videoView = (VideoView) findViewById(R.id.VideoView);
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
        Uri video = Uri.parse(link);
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(video);
        videoView.start();
    } catch (Exception e) {
        // TODO: handle exception
        Toast.makeText(this, "Error connecting", Toast.LENGTH_SHORT).show();
    }

android manifest.xml でインターネット許可を与えます。mediaplayer を使用して再生する場合は、ここをクリックしてください。

于 2013-01-28T08:58:58.193 に答える
1

3.1 より上の Android バージョンは、HTTPS メディア ファイルのみをサポートします。公式リンクを参照してください。

于 2013-01-28T11:58:55.093 に答える
1

長い闘争の後、私は解決策を見つけました。答えを見つけるのに時間がかかりすぎるので、あなたと共有します

videoview クラスと以下のコードをオーバーライドします。

 @Override
public void setVideoURI(Uri uri) {
    super.setVideoURI(uri);
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);
        MySSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        sf.fixHttpsURLConnection();
        HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
        HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2016-11-09T14:24:29.127 に答える