| | |
| | | import android.content.Context; |
| | | import android.os.Handler; |
| | | import android.os.Looper; |
| | | import android.text.TextUtils; |
| | | import android.util.Log; |
| | | import android.view.SurfaceHolder; |
| | | import android.view.SurfaceView; |
| | | import android.view.WindowManager; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.ScheduledExecutorService; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import com.alivc.live.pusher.AlivcAudioAACProfileEnum; |
| | | import timber.log.Timber; |
| | |
| | | import com.alivc.live.pusher.AlivcQualityModeEnum; |
| | | import com.alivc.live.pusher.AlivcResolutionEnum; |
| | | import com.anyun.libusbcamera.UsbCamera; |
| | | import com.anyun.libusbcamera.WatermarkParam; |
| | | import com.safeluck.floatwindow.MediaArgu; |
| | | import com.safeluck.floatwindow.ResponseVO; |
| | | import com.safeluck.floatwindow.util.AudioRecordManager; |
| | | import com.safeluck.floatwindow.util.GlobalData; |
| | | |
| | | /** |
| | | * USB摄像头推流管理器 |
| | |
| | | try { |
| | | // 初始化推流SDK |
| | | initAlivcPusher(); |
| | | setWaterMask(); |
| | | pushStarted = false; |
| | | |
| | | // 检查并打开USB摄像头 |
| | |
| | | // 初始化推流器 |
| | | alivcPusher = new AlivcLivePusher(); |
| | | alivcPusher.init(context.getApplicationContext(), alivcLivePushConfig); |
| | | |
| | | // 外部自定义流模式下,同样需要先开启预览,让状态从 INIT 进入 PREVIEWED |
| | | // 创建一个隐藏的 Window 来承载 SurfaceView,确保 Surface 能够被创建 |
| | | windowManager = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); |
| | |
| | | } |
| | | } |
| | | |
| | | WatermarkParam watermarkParam; |
| | | ArrayList<WatermarkParam> watermarkParamList = new ArrayList<>(); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | int baseY = 20; |
| | | int fontSize= 24; |
| | | private ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); |
| | | private void setWaterMask() { |
| | | |
| | | scheduledExecutorService.scheduleWithFixedDelay(() -> { |
| | | |
| | | |
| | | if (pushStarted){ |
| | | |
| | | if (!TextUtils.isEmpty(GlobalData.getInstance().getWaterMaskInfo())){ |
| | | Log.i(TAG,"tieshuiin"); |
| | | |
| | | if (resolutionArr[0]==320&&resolutionArr[1]==240){ |
| | | fontSize = 24; |
| | | baseY = 2; |
| | | }else if (resolutionArr[0]==640&&resolutionArr[1]==480){ |
| | | fontSize = 32; |
| | | baseY = 4; |
| | | }else if (resolutionArr[0]==1280&&resolutionArr[1]==720){ |
| | | fontSize = 48; |
| | | baseY = 6; |
| | | }else{ |
| | | baseY = 2; |
| | | fontSize = 24; |
| | | } |
| | | String school = GlobalData.getInstance().parseWaterMaskInfo("school", "无", GlobalData.ShareType.STRING); |
| | | watermarkParam = new WatermarkParam(10,baseY,school); |
| | | watermarkParamList.clear(); |
| | | watermarkParamList.add(watermarkParam); |
| | | |
| | | String teacher = GlobalData.getInstance().parseWaterMaskInfo("teacher", "无", GlobalData.ShareType.STRING); |
| | | |
| | | |
| | | String stu = GlobalData.getInstance().parseWaterMaskInfo("student", "无", GlobalData.ShareType.STRING); |
| | | baseY = fontSize*11/10+baseY; |
| | | watermarkParam = new WatermarkParam(10,baseY,"教练:"+teacher+" 学员:"+stu); |
| | | watermarkParamList.add(watermarkParam); |
| | | |
| | | double speed = GlobalData.getInstance().parseWaterMaskInfo("speed", 0.0, GlobalData.ShareType.DOUBLE); |
| | | |
| | | |
| | | String czh = GlobalData.getInstance().parseWaterMaskInfo("car_license", "无", GlobalData.ShareType.STRING) + GlobalData.getInstance().getCameraTag; |
| | | baseY = fontSize*11/10+baseY; |
| | | watermarkParam = new WatermarkParam(10,resolutionArr[1]-baseY,czh +" "+String.format("速度:%.1f",speed)); |
| | | watermarkParamList.add(watermarkParam); |
| | | |
| | | |
| | | double latitude = GlobalData.getInstance().parseWaterMaskInfo("latitude", 29.51228918, GlobalData.ShareType.DOUBLE); |
| | | double longitude = GlobalData.getInstance().parseWaterMaskInfo("longitude", 106.45556208, GlobalData.ShareType.DOUBLE); |
| | | |
| | | // new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) |
| | | baseY = fontSize*11/10+baseY; |
| | | watermarkParam = new WatermarkParam(10,resolutionArr[1]-fontSize, String.format("%.6f %.6f", latitude, longitude)+" "+sdf.format(new Date())); |
| | | watermarkParamList.add(watermarkParam); |
| | | |
| | | if (resolutionArr[0]==320&&resolutionArr[1]==240){ |
| | | usbCamera.enableWatermark(true,"/system/ms_unicode_24.bin"); |
| | | usbCamera.setWatermark(3,fontSize,1,watermarkParamList); |
| | | }else if (resolutionArr[0]==640&&resolutionArr[1]==480){ |
| | | usbCamera.enableWatermark(true,"/system/ms_unicode_32.bin"); |
| | | usbCamera.setWatermark(3,fontSize,1,watermarkParamList); |
| | | }else if (resolutionArr[0]==1280&&resolutionArr[1]==720){ |
| | | usbCamera.enableWatermark(true,"/system/ms_unicode_48.bin"); |
| | | usbCamera.setWatermark(3,fontSize,1,watermarkParamList); |
| | | }else{ |
| | | usbCamera.enableWatermark(true,"/system/ms_unicode_24.bin"); |
| | | usbCamera.setWatermark(3,fontSize,1,watermarkParamList); |
| | | } |
| | | } |
| | | } |
| | | |
| | | },1,1, TimeUnit.SECONDS); |
| | | } |
| | | |
| | | private Handler mainHandler = new Handler(Looper.getMainLooper()); |
| | | /** |
| | | * 设置监听器 |