0

MediaPlayerを使用して Android を実行しようとしていますrunOnUiThread。で例外をキャッチしませんでしたsetDataSource。しかし、その後、何も起こりませんMediaPlayer。サーフェスが変更されたときにコールバックを提供する必要がありonPreparedます。

この方法はサポートされてMediaPlayerいないようです。本当の場合、回避策はありますか? ブロックされているネットワーククエリで情報を取得する必要があるため、この種のロジックが必要です。私はそこから逃げる必要がありますonSuccess

これに対するあなたの提案は何ですか?どうもありがとう!

onResume() 
{
   getInfo(xxx);
}

void getInfo(url, new DataListener() {
    @Override
    public void onDataSuccess(xxx) {
        playVideoOnSuccess(xxx);
    }
}
public void playVideoOnSuccess(xxx)
{
    myBaseActivity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            try {
                mPlayerListener = new VideoPlayerListener(null, content);
                // create new mediaplayer
                mVideoPlayer = VideoPlayer.getInstance();
                mVideoPlayer.setVideoPlayerListener(mPlayerListener);

                // setDataSource
                mVideoPlayer.consumeContent(content);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
4

1 に答える 1

1

これは、ビデオを再生するために使用したサンプルコードです。これが何らかの形で役立つことを願っています

   public class VideoViewDemo extends Activity {

private static final String TAG = "VideoViewDemo";
private String current;

/**
 * TODO: Set the path variable to a streaming video URL or a local media
 * file path.
 */
private String path = "http://www.boisestatefootball.com/sites/default/files/videos/original/01%20-%20coach%20pete%20bio_4.mp4";
private VideoView mVideoView;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.videoview);
    mVideoView = (VideoView) findViewById(R.id.surface_view);
    runOnUiThread(new Runnable() {
        public void run() {
            playVideo();
        }
    });
}

private void playVideo() {
    try {
        // final String path = path;
        Log.v(TAG, "path: " + path);
        if (path == null || path.length() == 0) {
            Toast.makeText(VideoViewDemo.this, "File URL/path is empty",
                    Toast.LENGTH_LONG).show();

        } else {
            // If the path has not changed, just start the media player
            if (path.equals(current) && mVideoView != null) {
                mVideoView.start();
                mVideoView.requestFocus();
                return;
            }
            current = path;
            mVideoView.setVideoPath(getDataSource(path));
            mVideoView.start();
            mVideoView.setMediaController(new MediaController(this));
            mVideoView.requestFocus();

        }
    } catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
        if (mVideoView != null) {
            mVideoView.stopPlayback();
        }
    }
}

private String getDataSource(String path) throws IOException {
    if (!URLUtil.isNetworkUrl(path)) {
        return path;
    } else {
        URL url = new URL(path);
        URLConnection cn = url.openConnection();
        cn.connect();
        InputStream stream = cn.getInputStream();
        if (stream == null)
            throw new RuntimeException("stream is null");
        File temp = File.createTempFile("mediaplayertmp", "dat");
        temp.deleteOnExit();
        String tempPath = temp.getAbsolutePath();
        FileOutputStream out = new FileOutputStream(temp);
        byte buf[] = new byte[128];
        do {
            int numread = stream.read(buf);
            if (numread <= 0)
                break;
            out.write(buf, 0, numread);
        } while (true);
        try {
            stream.close();
        } catch (IOException ex) {
            Log.e(TAG, "error: " + ex.getMessage(), ex);
        }
        return tempPath;
    }
}
}

これは私のために働きます

于 2013-04-05T17:01:20.117 に答える