2

ビデオをストリーミングして、VideoView を使用して再生しようとしています。以下に示すように、 setVideoURI() を使用してビデオのソース URL をビューに提供します。urlString = "www.myvideoserver.com/videos/bigbuckbunny.mp4" のようなハードコーディングされた値を使用すると、ビデオは正常に再生されます。ただし、インテント (ユーザーがビデオを選択した前のアクティビティから取得) から値が urlString に渡されると、「申し訳ありませんが、ビデオを再生できません」というメッセージが表示されます。ここここで説明されているように、一般的な原因の1つはビデオ形式であることを読みました. URLが修正されたときにビデオを再生できるため、フォーマットの問題ではないことはほぼ確実です(そして、Log.d( "PVurl"、urlString)からわかるので、urlStringの値が私が修正したものとまったく同じです。つまり、LogCat では、値を行にコピー ペーストしますurlString = getIntent()... // "www.myvideoserver.com/videos/bigbuckbunny.mp4"。urlString がインテントの戻り値に設定されている場合は動作しません。LogCat エラー パネルには次のように表示されます。

04-13 17:35:32.786: ERROR/MediaPlayer(2620): error (1, -1007)
04-13 17:35:32.786: ERROR/MediaPlayer(2620): Error (1,-1007)

インターネットで検索しましたが、以前にこのようなエラー コードに遭遇した人はないようです。

何が問題なのか、誰かが何か考えているなら、私は非常に感謝しています。ありがとう!

public void playvideo () { // obtain URL of the requested video from the intent in previous activity

    try
    {
        urlString =  getIntent().getStringExtra("mypackage.fulladdr");

        if (urlStr != null)
        {
            Log.d("PVurl", urlString);

            VideoView v = (VideoView) findViewById(R.id.videoView1);

            // play video

            v.setVideoURI(Uri.parse(urlString));
            v.setMediaController(new MediaController(this));
            v.start();

            v.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    showRatingDialog();
                }
            });
        }
    }
    catch (Exception e)
    {
        Log.d("PV_TAG", +e.getMessage());
        e.printStackTrace();
    }
}
4

4 に答える 4

1

Uriが参照しているもの(あなたの場合はhttp)を見つけるために必要なスキームを追加していません。

urlString = "www.myvideoserver.com/videos/bigbuckbunny.mp4"に変更します urlString = "http://www.myvideoserver.com/videos/bigbuckbunny.mp4"

于 2012-04-14T05:02:01.733 に答える
1

(1, -1007) エラーの意味: MEDIA_ERROR_UNKNOWN - 「ファイルまたはネットワーク関連の操作エラー」。

これは、破損したファイルが原因である可能性があります

android.media.MediaPlayer.OnErrorListener#onError の javadoc も参照してください http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html#onError

@param what the type of error that has occurred:
MEDIA_ERROR_UNKNOWN
MEDIA_ERROR_SERVER_DIED

@param extra an extra code, specific to the error. Typically implementation dependent.
MEDIA_ERROR_IO
MEDIA_ERROR_MALFORMED
MEDIA_ERROR_UNSUPPORTED
MEDIA_ERROR_TIMED_OUT
于 2014-03-12T17:57:23.623 に答える
0

了解しました。MediaPlayerエラー(1、-1007)の意味を見つけるために何時間も無駄に調べた結果、問題が見つかりました。

実際には、行getIntent()。getStringExtra( "mypackage.fulladdr");というかなり不幸な事実と関係があります。最後に余分な空白がある文字列を返します。getIntent()の実装の問題だと思います。この種のバグをどこに報告すればよいかは誰でも知っています。それは素晴らしいことです。

@Akhilと@javaMeの試みに感謝します!

于 2012-04-17T05:38:55.413 に答える
0

私は同じことを試し、それを機能させることができました。おそらく、コードで何か他のことが起こっています。これが私が持っているものです:

// Intent to start the activity that launches the video player
Intent i = new Intent(this, ExampleActivity.class);
i.putExtra("url", "http://www.yourvideo.com/yourvid.m4v");
startActivity(i);

そして、これがプレイヤーを扱うコードです:

private MediaController mController;
private Uri videoUri; 
private int percentBuffered= 0;
private VideoView videoView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    mController = new MediaController(this);

    videoView = (VideoView) findViewById(R.id.videoView1);

    // access String from the intent that launched this Activity
    videoUri = Uri.parse(getIntent().getStringExtra("url"));
}

@Override
public void onResume() {
    super.onResume();
    videoView.setOnCompletionListener(this);
    try {
        videoView.setVideoURI(videoUri);
        mController.setMediaPlayer(videoView);
        videoView.setMediaController(mController);
        videoView.requestFocus();
        videoView.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
protected void onPause() {
    super.onPause();
    finish();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    mController.show();
    return super.onTouchEvent(event);
}

@Override
public int getBufferPercentage() {
    return percentBuffered;
}

@Override
public int getCurrentPosition() { 
    return videoView.getCurrentPosition();
}

@Override
public int getDuration() {
    return videoView.getDuration();
}

@Override
public boolean isPlaying() {
    return videoView.isPlaying();
}

@Override
public void pause() {
    videoView.pause();
}

@Override
public void seekTo(int pos) {
    videoView.seekTo(pos);
}

@Override
public void start() {
    videoView.start();
}

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    percentBuffered = percent;
}

@Override
public void onCompletion(MediaPlayer mp) {

}

public boolean canPause() {
    return true;
}

public boolean canSeekBackward() {
    return true;
}

public boolean canSeekForward() {
    return true;
}
于 2012-04-14T05:02:49.890 に答える