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); } } }