desc:record、push代码 方式2

main
xiaowusky 2 years ago
parent f0a7a69eae
commit b4b896bc3a

@ -3,6 +3,8 @@ package com.yinuo.safetywatcher.watcher.ui
import android.content.Intent import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Process import android.os.Process
import android.view.SurfaceHolder
import android.view.SurfaceHolder.Callback
import android.view.View import android.view.View
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -101,16 +103,33 @@ class HomeActivity : NoOptionsActivity() {
* 设置摄像头 * 设置摄像头
*/ */
private fun setForCamera() { private fun setForCamera() {
mClient = EasyPlayerClient(this@HomeActivity, mBinding.surface, null) { mBinding.surface.holder.addCallback(object : Callback{
RecordHelper.onFrameAvailable(mBinding.surface) override fun surfaceCreated(holder: SurfaceHolder) {
if (!AppData.hasCameraData()) { mClient = EasyPlayerClient(this@HomeActivity, mBinding.surface.holder.surface, null) {
AppData.setCameraData(true) RecordHelper.onFrameAvailable(mBinding.surface)
changeViewStatus() if (!AppData.hasCameraData()) {
closeLoadingDialog() AppData.setCameraData(true)
changeViewStatus()
closeLoadingDialog()
}
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
mClient?.play(CAMERA_URL)
} }
watchCamera(DELAY_TIME_CHECK_CAMERA)
} override fun surfaceChanged(
mClient?.play(CAMERA_URL) holder: SurfaceHolder,
format: Int,
width: Int,
height: Int
) {
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
mClient?.stop()
}
})
// 第一次很慢所以10秒 // 第一次很慢所以10秒
watchCamera(DELAY_TIME_OPEN_CAMERA) watchCamera(DELAY_TIME_OPEN_CAMERA)
showLoadingDialog(R.string.connecting_camera) showLoadingDialog(R.string.connecting_camera)
@ -250,4 +269,14 @@ class HomeActivity : NoOptionsActivity() {
warnDialog?.dismiss() warnDialog?.dismiss()
Process.killProcess(Process.myPid()) Process.killProcess(Process.myPid())
} }
override fun onPause() {
super.onPause()
mClient?.pause()
}
override fun onResume() {
super.onResume()
mClient?.resume()
}
} }

@ -4,7 +4,9 @@ import android.graphics.Bitmap
import android.opengl.EGL14 import android.opengl.EGL14
import android.os.Handler import android.os.Handler
import android.os.HandlerThread import android.os.HandlerThread
import android.view.TextureView import android.view.PixelCopy
import android.view.PixelCopy.OnPixelCopyFinishedListener
import android.view.SurfaceView
import com.common.commonlib.CommonApplication import com.common.commonlib.CommonApplication
import com.common.commonlib.utils.BitmapUtils import com.common.commonlib.utils.BitmapUtils
import com.yinuo.library.vlc.encoder.BaseMovieEncoder.EncoderConfig import com.yinuo.library.vlc.encoder.BaseMovieEncoder.EncoderConfig
@ -32,23 +34,47 @@ object RecordHelper {
mVideoEncoder = MovieEncoder1(CommonApplication.getContext(), width, height, true) mVideoEncoder = MovieEncoder1(CommonApplication.getContext(), width, height, true)
} }
fun onFrameAvailable(view: TextureView) { fun onFrameAvailable(view: SurfaceView) {
if (!mVideoEncoder.isRecording) { if (!mVideoEncoder.isRecording) {
return return
} }
// workHandler.post {
// val nanoTime = System.nanoTime()
// var bitmap = view.bitmap
// bitmap?.let {
// val overLayBitmap: Bitmap? = TxtOverlay.getOverlayBitmap()
// overLayBitmap?.let {
// bitmap = BitmapUtils.mergeBitmap(bitmap!!, overLayBitmap)
// }
// }
// val buffer = ByteBuffer.allocate(bitmap!!.getByteCount())
// bitmap!!.copyPixelsToBuffer(buffer)
// bitmap!!.recycle()
// mVideoEncoder.frameAvailable(buffer.array(), nanoTime)
// }
workHandler.post { workHandler.post {
val nanoTime = System.nanoTime() var bitmap = Bitmap.createBitmap(
var bitmap = view.bitmap width,
bitmap?.let { height,
val overLayBitmap: Bitmap? = TxtOverlay.getOverlayBitmap() Bitmap.Config.ARGB_8888
overLayBitmap?.let { )
bitmap = BitmapUtils.mergeBitmap(bitmap!!, overLayBitmap) PixelCopy.request(
} view.holder.surface, bitmap, { copyResult ->
} val nanoTime = System.nanoTime()
val buffer = ByteBuffer.allocate(bitmap!!.getByteCount()) if (copyResult == PixelCopy.SUCCESS) {
bitmap!!.copyPixelsToBuffer(buffer) bitmap?.let {
bitmap!!.recycle() val overLayBitmap: Bitmap? = TxtOverlay.getOverlayBitmap()
mVideoEncoder.frameAvailable(buffer.array(), nanoTime) overLayBitmap?.let {
bitmap = BitmapUtils.mergeBitmap(bitmap!!, overLayBitmap)
}
}
val buffer = ByteBuffer.allocate(bitmap!!.byteCount)
bitmap!!.copyPixelsToBuffer(buffer)
bitmap!!.recycle()
mVideoEncoder.frameAvailable(buffer.array(), nanoTime)
}
}, workHandler
)
} }
} }

@ -3,7 +3,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<TextureView <SurfaceView
android:id="@+id/surface" android:id="@+id/surface"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />

@ -378,6 +378,10 @@ public class EasyPlayerClient implements Client.SourceCallBack {
* @return * @return
*/ */
public void play(final String url) { public void play(final String url) {
if (lifecycler == null){
start(url, TRANSTYPE_TCP, 0, Client.EASY_SDK_VIDEO_FRAME_FLAG | Client.EASY_SDK_AUDIO_FRAME_FLAG, "", "", null);
return;
}
if (lifecycler.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.CREATED)) { if (lifecycler.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.CREATED)) {
start(url, TRANSTYPE_TCP, 0, Client.EASY_SDK_VIDEO_FRAME_FLAG | Client.EASY_SDK_AUDIO_FRAME_FLAG, "", "", null); start(url, TRANSTYPE_TCP, 0, Client.EASY_SDK_VIDEO_FRAME_FLAG | Client.EASY_SDK_AUDIO_FRAME_FLAG, "", "", null);
} else { } else {

Loading…
Cancel
Save