gpt4 book ai didi

Android:如何创建视频播放器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:01 26 4
gpt4 key购买 nike

我正在创建一个录像机,并想创建一个视频播放器来预览录制的视频。修改代码 from this page我通过以下方式创建了一个 MediaPreview 类:

public class MediaPreview extends Activity implements OnErrorListener, 

OnBufferingUpdateListener,
OnCompletionListener, OnPreparedListener, SurfaceHolder.Callback{

private static final String TAG = "MediaPreview";

private MediaPlayer mp;
private SurfaceView mPreview;
private SurfaceHolder holder;
private Button btnPlay;
private Button btnPause;
private Button btnReset;
private Button btnStop;

private String mPath;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.media_preview);

mPreview = (SurfaceView)findViewById(R.id.mPreview);
btnPlay = (Button)findViewById(R.id.btnPlay);
btnPause = (Button)findViewById(R.id.btnPause);
btnReset = (Button)findViewById(R.id.btnReset);
btnStop = (Button)findViewById(R.id.btnStop);

getPathFromParentDialog();

btnPlay.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {
playVideo();
}
});

btnPause.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mp != null){
mp.pause();
}
}
});

btnReset.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {
if(mp != null){
mp.seekTo(0);
}
}
});

btnStop.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {
if(mp != null){
mp.stop();
mp.release();
}
}
});

getWindow().setFormat(PixelFormat.TRANSPARENT);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setFixedSize(400, 300);
}

@Override
protected void onResume() {

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
super.onResume();
}

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if(mp != null){
mp.stop();
mp.release();
}
return false;
}

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
// TODO Auto-generated method stub

}

@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub

}

@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

private void playVideo() {
try{
mp = new MediaPlayer();
mp.setOnErrorListener(this);
mp.setOnBufferingUpdateListener(this);
mp.setOnCompletionListener(this);
mp.setOnPreparedListener(this);
mp.setAudioStreamType(2);

mp.setDisplay(mPreview.getHolder());
Runnable r = new Runnable(){
@Override
public void run() {
try{
setDataSource(mPath);
}
catch(Exception ex){
Log.e(TAG, ex.getMessage());
}
try {
mp.prepare();
Log.v(TAG, "Duration: ===> " + mp.getDuration());
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
mp.start();
}

};
new Thread(r).start();
}
catch(Exception ex){
String sDummy = ex.toString();
if(mp != null){
mp.stop();
mp.release();
}
}

}

private void setDataSource(String path) throws IOException {
if(!URLUtil.isNetworkUrl(mPath)){
mp.setDataSource(mPath);
}
else{
URL url = new URL(mPath);
URLConnection cn = url.openConnection();
cn.connect();
InputStream stream = cn.getInputStream();
if(stream == null){
throw new RuntimeException("stream is null");
}
File fileTemp = File.createTempFile("mediaplayerTmp", "dat");
String tempPath = fileTemp.getAbsolutePath();
FileOutputStream out = new FileOutputStream(fileTemp);
byte buf[] = new byte[128];
do{
int numRead = stream.read(buf);
if(numRead <= 0){
break;
}
out.write(buf, 0, numRead);
}while(true);
mp.setDataSource(tempPath);
try{
stream.close();
}
catch(Exception ex){
String sDummy = ex.toString();
}
}
}

private void getPathFromParentDialog()
{
Intent intent = getIntent();
mPath = intent.getExtras().getString(MediaLibrary.FILENAME);
}
}

代码成功执行(没有任何异常)until mp.start();,但是屏幕是空白的(屏幕上只有按钮)。

有谁知道上面的代码可能出了什么问题,或者有没有网络上可用的示例?

非常感谢你的帮助

最佳答案

即兴发挥,我认为您的某些回调方法需要更多逻辑,例如 surfaceCreated()

关于Android:如何创建视频播放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1188346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com