作者:wuhua
空间:htt://wuhua.3geye.net
转载请保留上面的信息(请尊重知识产品)谢谢
package com.ucweb.player;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.Menu.Item;
public class VideoPlayer extends Activity implements OnErrorListener,
??????????????? OnBufferingUpdateListener, OnCompletionListener
??????? {
??????? private static final String TAG = "PlayVideo";
??????? private static final int PLAY_VIDEO = Menu.FIRST + 1;
??????? private static final int PLAY_MP3 = Menu.FIRST + 2;
??????? private static final int STOP_PLAY_ID = Menu.FIRST + 4;
??????? private MediaPlayer mp;
??????? private Preview mPreview;
??????? /** Called when the activity is first created. */
??????? @Override
??????? public void onCreate(Bundle icicle)
??????? {
??????????????? super.onCreate(icicle);
??????????????? Log.v(TAG, "onCreate: ===> ");
??????????????? requestWindowFeature(Window.FEATURE_NO_TITLE);
??????????????? getWindow().setFormat(PixelFormat.TRANSPARENT);
??????????????? mPreview = new Preview(this);
??????????????? setContentView(mPreview);
??????? }
??????? private void playVideo()
??????? {
??????????????? try
??????????????? {
??????????????????????? SurfaceView view = new SurfaceView(this);
??????????????????? Surface surface = view.getHolder().getSurface();
??????????????????????? setContentView(view);
??????????????????????? Log.v(TAG, "height: " + mPreview.getHeight());
??????????????????????? Log.v(TAG, "width: " + mPreview.getWidth());
??????????????????????? mp = MediaPlayer.create(this, R.raw.mp3);
??????????????????????? mp.setOnErrorListener(this);
??????????????????????? mp.setDisplay(mPreview.getHolder().getSurface());
??????????????????????? mp.prepare();
??????????????????????? Log.v(TAG, "Duration:? ===>" + mp.getDuration());
??????????????????????? mp.start();
??????????????? }
??????????????? catch (Exception e)
??????????????? {
??????????????????????? //e.printStackTrace();
??????????????????????? Log.e(TAG, "error: " + e.getMessage());
??????????????????????? stopPlay();
??????????????? }
??????? }
??????? private void playMp3() throws IOException
??????? {
??????????????? mp = MediaPlayer.create(this, R.raw.mp3);
??????????????? mp.prepare();
??????????????? Log.v(TAG, "Duration: ===>" + mp.getDuration());
??????????????? mp.start();
??????? }
??????? private void stopPlay() {
??????????????? if (mp != null) {
??????????????????????? mp.stop();
??????????????????????? mp.release();
??????????????? }
??????? }
??????? @Override
??????? public boolean onCreateOptionsMenu(Menu menu)
??????? {
??????????????? boolean result = super.onCreateOptionsMenu(menu);
??????????????? menu.add(0, PLAY_MP3,"MP3");
??????????????? menu.add(1, PLAY_VIDEO, "MP3");
??????????????? menu.add(1, STOP_PLAY_ID, "MP3");
??????????????? return result;
??????? }
??????? @Override
??????? public boolean onOptionsItemSelected(Item item)
??????? {
??????????????? Log.v(TAG, "option: " + item.getId());
??????????????? switch (item.getId()) {
??????????????? case PLAY_MP3:
?????????????? ??? ?try{
??????????????????????? playMp3();
??????????????? }catch(Exception e){
??????????????? }
??????????????????????? break;
??????????????? case PLAY_VIDEO:
??????????????????????? playVideo();
??????????????????????? break;
??????????????? case STOP_PLAY_ID:
??????????????????????? stopPlay();
??????????????????????? break;
??????????????? }
??????????????? return super.onOptionsItemSelected(item);
??????? }
??????? @Override
??? protected boolean isFullscreenOpaque()
??????? {
??????????? // Our main window is set to translucent, but we know that we
//will
??????????? // fill it with opaque data. Tell the system that so it can
//perform
??????????? // some important optimizations.
??????????? return false;
??????? }
??????? @Override
??????? protected void onResume() {
??????????????? // Because the CameraDevice object is not a shared resource,
??????????????? // it's very important to release it when the activity is paused.
??????????????? super.onResume();
??????????????? //??? mPreview.resume();
??????? }
??????? @Override
??????? protected void onPause() {
??????????????? // Start Preview again when we resume.
??????????????? super.onPause();
??????????????? //??? mPreview.pause();
??????? }
??????? public void onError(MediaPlayer mediaPlayer, int what, int extra) {
??????????????? Log.e(TAG, "onError--->?? what:" + what + "??? extra:" + extra);
??????????????? if (mediaPlayer != null) {
??????????????????????? mediaPlayer.stop();
??????????????????????? mediaPlayer.release();
??????????????? }
??????? }
??????? public void onBufferingUpdate(MediaPlayer arg0, int percent) {
??????????????? Log.d(TAG, "onBufferingUpdate--->?? percent:" + percent);
??????? }
??????? public void onCompletion(MediaPlayer arg0) {
??????????????? Log.d(TAG, "onCompletion--->?? finished");
??????? }
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
??????? SurfaceHolder mHolder;
??????? private boolean mHasSurface;
??????? Preview(Context context) {
??????????????? super(context);
??????????????? mHolder = getHolder();
??????????????? mHolder.addCallback(this);
??????????????? mHasSurface = false;
??????????????? mHolder.setFixedSize(320, 240);
??????????????? //mHolder.setFixedSize(192, 242);
??????? }
??????? public void surfaceCreated(SurfaceHolder holder) {
??????????????? // The Surface has been created, start our main acquisition thread.
??????????????? mHasSurface = true;
?????????????? // return true;
??????? }
??????? public void surfaceDestroyed(SurfaceHolder holder) {
??????????????? // Surface will be destroyed when we return. Stop the preview.
??????????????? mHasSurface = false;
??????? }
??????? public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
??? // Surface size or format has changed. This should not happen in
//this
??? // example.
}}
现在对这个东西还进行摸索阶段不知道他有没有提供对流媒体的支持。如果可以直接支持流媒体的话。那真是太好了。这样就可以用java来写流媒体。 继续研究
大家多摸索摸索...
大家多摸索摸索...
小弟我在研究这块东西,不过发现一直不成功。老出错。发现网络对这块也没有比较深入的研究,看了MideaPlayer,那些APIs也是少的可怜,比较简单。
真机上也不是流媒体, HTTP Progressive download而已...