package com.bsk.zhangbo.demoforbsk.ui.activity;
|
|
import android.content.res.AssetManager;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.Surface;
|
import android.view.SurfaceHolder;
|
import android.view.SurfaceView;
|
import android.view.View;
|
import android.widget.Button;
|
import android.widget.ImageView;
|
|
import com.bsk.zhangbo.demoforbsk.R;
|
import com.bsk.zhangbo.demoforbsk.base.BaseActivity;
|
import java.io.InputStream;
|
|
public class TestARGB8888Actiivty extends BaseActivity {
|
private ImageView mImagView;
|
private InputStream inputStream;
|
|
|
|
//播放
|
|
|
SurfaceHolderVideoSink mSurfaceHolder1VideoSink;
|
VideoSink mSelectedVideoSink;
|
SurfaceView mSurfaceView1;
|
SurfaceHolder mSurfaceHolder1;
|
boolean mCreated = false;
|
boolean mIsPlaying = false;
|
String mSourceString = "clips/testfile.mp4";
|
private Button button;
|
VideoSink mNativeCodecPlayerVideoSink;
|
|
/**
|
* Native methods, implemented in jni folder
|
*/
|
public static native void createEngine();
|
|
public static native boolean createStreamingMediaPlayer(AssetManager assetMgr, String filename);
|
|
public static native void setPlayingStreamingMediaPlayer(boolean isPlaying);
|
|
public static native void shutdown();
|
|
public static native void setSurface(Surface surface);
|
|
public static native void rewindStreamingMediaPlayer();
|
|
/** Load jni .so on initialization */
|
static {
|
System.loadLibrary("native-codec-jni");
|
}
|
|
@Override
|
public int getLayoutId() {
|
return R.layout.activity_test_argb_8888_actiivty;
|
}
|
|
@Override
|
public void initViews(Bundle savedInstanceState) {
|
// mImagView = (ImageView) findViewById(R.id.test_img);
|
|
// set up the Surface 1 video sink
|
mSurfaceView1 = (SurfaceView) findViewById(R.id.surfaceview1);
|
button = null;//(Button) findViewById(R.id.btn);
|
|
mSurfaceHolder1 = mSurfaceView1.getHolder();
|
mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1);
|
mSelectedVideoSink = mSurfaceHolder1VideoSink;
|
mSelectedVideoSink.useAsSinkForNative();
|
mCreated = createStreamingMediaPlayer(getResources().getAssets(),
|
mSourceString);
|
// mIsPlaying = !mIsPlaying;
|
// setPlayingStreamingMediaPlayer(true);
|
|
mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() {
|
|
@Override
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
Log.v("", "surfaceChanged format=" + format + ", width=" + width + ", height="
|
+ height);
|
}
|
|
@Override
|
public void surfaceCreated(SurfaceHolder holder) {
|
Log.v("", "surfaceCreated");
|
setSurface(holder.getSurface());
|
}
|
|
@Override
|
public void surfaceDestroyed(SurfaceHolder holder) {
|
Log.v("", "surfaceDestroyed");
|
}
|
|
});
|
}
|
|
@Override
|
public void initToolBar() {
|
|
}
|
|
@Override
|
public void initListeners() {
|
button.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
if (!mCreated) {
|
if (mNativeCodecPlayerVideoSink == null) {
|
if (mSelectedVideoSink == null) {
|
return;
|
}
|
mSelectedVideoSink.useAsSinkForNative();
|
mNativeCodecPlayerVideoSink = mSelectedVideoSink;
|
}
|
if (mSourceString != null) {
|
mCreated = createStreamingMediaPlayer(getResources().getAssets(),
|
mSourceString);
|
}
|
}
|
if (mCreated) {
|
mIsPlaying = !mIsPlaying;
|
setPlayingStreamingMediaPlayer(mIsPlaying);
|
}
|
}
|
});
|
}
|
|
@Override
|
public void initData() {
|
// try{
|
//
|
// Bitmap bitmap = Bitmap.createBitmap(480,360, Bitmap.Config.ARGB_8888);
|
// //得到资源中的asset数据流
|
// InputStream in = getResources().getAssets().open("test.argb");
|
//
|
// int length = in.available();
|
// byte [] buffer = new byte[length];
|
// ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
|
// in.read(buffer);
|
// bitmap.copyPixelsFromBuffer(byteBuffer);
|
// mImagView.setImageBitmap(bitmap);
|
//
|
// }catch(Exception e){
|
//
|
// e.printStackTrace();
|
//
|
// }
|
|
|
}
|
|
|
/**
|
* Called when the activity is about to be paused.
|
*/
|
@Override
|
public void onPause() {
|
mIsPlaying = false;
|
setPlayingStreamingMediaPlayer(false);
|
super.onPause();
|
}
|
|
/**
|
* Called when the activity is about to be destroyed.
|
*/
|
@Override
|
public void onDestroy() {
|
shutdown();
|
mCreated = false;
|
super.onDestroy();
|
}
|
|
|
// VideoSink abstracts out the difference between Surface and SurfaceTexture
|
// aka SurfaceHolder and GLSurfaceView
|
static abstract class VideoSink {
|
|
abstract void setFixedSize(int width, int height);
|
|
abstract void useAsSinkForNative();
|
|
}
|
|
static class SurfaceHolderVideoSink extends VideoSink {
|
|
private final SurfaceHolder mSurfaceHolder;
|
|
SurfaceHolderVideoSink(SurfaceHolder surfaceHolder) {
|
mSurfaceHolder = surfaceHolder;
|
}
|
|
@Override
|
void setFixedSize(int width, int height) {
|
mSurfaceHolder.setFixedSize(width, height);
|
}
|
|
@Override
|
void useAsSinkForNative() {
|
Surface s = mSurfaceHolder.getSurface();
|
Log.i("@@@", "setting surface " + s);
|
setSurface(s);
|
}
|
|
}
|
|
}
|