From 6aa3850f260161c015474faf68165158165afea8 Mon Sep 17 00:00:00 2001 From: Peng Li Date: Thu, 24 May 2018 19:39:31 +0800 Subject: [PATCH] Add CameraView and set fullscreen for preview --- .gitignore | 1 + .idea/misc.xml | 34 ------- app/.gitignore | 1 + .../main/java/ai/suanzi/rtmpclient/CameraView.java | 47 ++++++++++ .../java/ai/suanzi/rtmpclient/MainActivity.java | 101 ++++++++++----------- .../main/java/ai/suanzi/rtmpclient/MyService.java | 1 + app/src/main/jni/Application.mk | 2 +- app/src/main/res/layout/activity_main.xml | 6 -- 8 files changed, 97 insertions(+), 96 deletions(-) delete mode 100644 .idea/misc.xml create mode 100644 app/src/main/java/ai/suanzi/rtmpclient/CameraView.java diff --git a/.gitignore b/.gitignore index a2e6bd0..158ec34 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ .externalNativeBuild /app/src/main/obj /app/src/main/libs/* +.idea/misc.xml diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 99202cc..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore index 796b96d..7981c18 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,2 @@ /build +.DS_Store diff --git a/app/src/main/java/ai/suanzi/rtmpclient/CameraView.java b/app/src/main/java/ai/suanzi/rtmpclient/CameraView.java new file mode 100644 index 0000000..5ddcb5e --- /dev/null +++ b/app/src/main/java/ai/suanzi/rtmpclient/CameraView.java @@ -0,0 +1,47 @@ +package ai.suanzi.rtmpclient; + +import android.content.Context; +import android.view.SurfaceHolder; +import android.view.SurfaceView; + +import org.apache.log4j.Logger; + +public class CameraView extends SurfaceView implements SurfaceHolder.Callback { + + private static Logger gLogger = Logger.getLogger("CameraView"); + public static int SCREEN_WIDTH; + public static int SCREEN_HEIGHT; + + private Context mContext; + private SurfaceHolder mHolder; + private Callback mCallback; + + public CameraView (Context context, Callback cb) { + super(context); + this.mContext = context; + mHolder = this.getHolder(); + mHolder.addCallback(this); + this.mCallback = cb; + } + + // SurfaceHolder.Callback implementation + @Override + public void surfaceCreated(final SurfaceHolder holder){ + gLogger.error("SurfacedCreated"); + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int widht, int height){ + gLogger.error("surfaceChanged"); + mHolder = holder; + mCallback.onSurfaceChanged(holder, format, widht, height); + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder){ gLogger.debug("surfaceDestroyed"); + } + + public interface Callback { + void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height); + } +} diff --git a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java index bf53ce4..685d85d 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java @@ -2,12 +2,16 @@ package ai.suanzi.rtmpclient; import android.content.IntentFilter; import android.support.design.widget.TextInputEditText; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.DisplayMetrics; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.Button; import android.widget.Toast; import android.content.Context; @@ -28,17 +32,11 @@ import android.net.ConnectivityManager; //"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90"; -public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, MyService.MyServiceEventListener{ +public class MainActivity extends AppCompatActivity implements MyService.MyServiceEventListener, CameraView.Callback { private static final String TAG = "MainActivity"; private Logger gLogger; - private SurfaceHolder mHolder; - private SurfaceView mSufaceView; - private Button mBtnStart; - private TextInputEditText mTextServer; - private TextInputEditText mTextUser; - private TextInputEditText mTextCamera; private String mMacAddr = ""; private NetworkMonitor networkMonitor; private UsbMonitor mUsbMonitor; @@ -49,6 +47,8 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal MyService mServer; Intent mIntent; + private CameraView mCameraView; + private void configLog(){ try { final LogConfigurator logConfigurator = new LogConfigurator(); @@ -72,13 +72,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal UserInfo.setConfigPath(getExternalFilesDir(null) + File.separator + "config"); this.mMacAddr = getMacAddr(); - mBtnStart = findViewById(R.id.button); - mTextServer = findViewById(R.id.textServer); - mTextUser = findViewById(R.id.textUser); - mTextCamera = findViewById(R.id.textCamera); - mSufaceView = findViewById(R.id.surfaceView); - mHolder = mSufaceView.getHolder(); - mHolder.addCallback(this); mIntent = new Intent(this, MyService.class); mUsbMonitor = new UsbMonitor(new UsbMonitor.UsbListener() { @@ -134,7 +127,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.error("onNotHealthy, in " + INTERVAL + " seconds, the publishing may stopped or have error "); doUnbindService(); doBindService(); - //restartApplication(); } }); mServiceHealthMonitor.setInterval(INTERVAL); // 5 minutes @@ -159,7 +151,8 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal mServer = mLocalBinder.getServiceInstance(); mServer.setServiceEventListener(MainActivity.this); if(mServer.setRtmpUrl(UserInfo.getConfig().toUrl(mMacAddr))){ - mServer.startPreview(mHolder); + //mServer.startPreview(mHolder); + mServer.startPreview(mCameraView.getHolder()); } @@ -183,14 +176,36 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } } + private void initCameraView (){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + requestWindowFeature(Window.FEATURE_NO_TITLE); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + ///setContentView(R.layout.activity_main); + + + DisplayMetrics outMetrics = new DisplayMetrics(); + this.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + + ActionBar actionBar = getSupportActionBar(); + actionBar.hide(); + + this.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + + CameraView.SCREEN_WIDTH = outMetrics.widthPixels; + CameraView.SCREEN_HEIGHT = outMetrics.heightPixels; + mCameraView = new CameraView(getApplicationContext(), this); + setContentView(mCameraView); + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + initCameraView(); + init(); loadConfig(); + if(NetworkMonitor.isNetworkAvailable(this) && mUsbMonitor.hasUsbCamera()){ gLogger.error("Current network is available"); doBindService(); @@ -198,17 +213,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.error("Current network NOT available or no USB Camera connected"); } - mBtnStart.setText("start"); - mBtnStart.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View view){ - gLogger.error("----------> onClick"); - saveConfig(); - doUnbindService(); - doBindService(); - } - }); - if(!mServiceHealthMonitor.isAlive()) { gLogger.debug("mServiceHealthMonitor start, interval " + INTERVAL); mServiceHealthMonitor.start(); @@ -263,25 +267,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal startActivity(intent); } - // SurfaceHolder.Callback implementation - @Override - public void surfaceCreated(final SurfaceHolder holder){ - gLogger.error("SurfacedCreated"); - } - - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int widht, int height){ - gLogger.error("surfaceChanged"); - mHolder = holder; - if (mServer != null) { - mServer.startPreview(holder); - } - } - - @Override - public void surfaceDestroyed(SurfaceHolder holder){ gLogger.debug("surfaceDestroyed"); - } - private String getMacAddr() { WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); @@ -289,18 +274,17 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } private void loadConfig() { - UserInfo info = UserInfo.getConfig(); - gLogger.error("server is:" + info.server); - mTextServer.setText(info.server.equals("") ? "rtmp://gpussh.suanzi.ai:1935/myapp" : info.server); - mTextUser.setText(info.user); - mTextCamera.setText(info.cameraId); - //mMacAddr = info.macAddr.equals("") ? this.mMacAddr : info.macAddr; - gLogger.error("loadConfig - url is :" + info.toUrl(mMacAddr)); +// UserInfo info = UserInfo.getConfig(); +// gLogger.error("server is:" + info.server); +// mTextServer.setText(info.server.equals("") ? "rtmp://gpussh.suanzi.ai:1935/myapp" : info.server); +// mTextUser.setText(info.user); +// //mMacAddr = info.macAddr.equals("") ? this.mMacAddr : info.macAddr; +// gLogger.error("loadConfig - url is :" + info.toUrl(mMacAddr)); } private void saveConfig() { UserInfo info = UserInfo.getConfig(); - info.update(mTextServer.getText().toString(), mTextUser.getText().toString(), mMacAddr, mTextCamera.getText().toString()); + //info.update(mTextServer.getText().toString(), mTextUser.getText().toString(), mMacAddr, mTextCamera.getText().toString()); if(info.saveConfig()) { Toast.makeText(getApplicationContext(), "Config saved", Toast.LENGTH_LONG).show(); } else { @@ -334,6 +318,13 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal mServiceHealthMonitor.record(); } + @Override + public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height){ + if(mServer != null){ + mServer.startPreview(holder); + } + } + private void restartApplication() { final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); diff --git a/app/src/main/java/ai/suanzi/rtmpclient/MyService.java b/app/src/main/java/ai/suanzi/rtmpclient/MyService.java index d448064..6b7ecf8 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MyService.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MyService.java @@ -91,6 +91,7 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer synchronized void notifyCameraOpened() { notify(); + gLogger.debug("notifyCameraOpened"); } void openCamera() { diff --git a/app/src/main/jni/Application.mk b/app/src/main/jni/Application.mk index 08f2103..f0d9ca8 100644 --- a/app/src/main/jni/Application.mk +++ b/app/src/main/jni/Application.mk @@ -1,2 +1,2 @@ -APP_ABI := armeabi-v7a +APP_ABI := armeabi-v7a x86 APP_STL := c++_shared \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8280482..b59b0fb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -82,12 +82,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textInputLayout2"> - \ No newline at end of file -- 2.11.0