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.os.Build
import android.os.Process
import android.view.SurfaceHolder
import android.view.SurfaceHolder.Callback
import android.view.View
import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope
@ -101,16 +103,33 @@ class HomeActivity : NoOptionsActivity() {
* 设置摄像头
*/
private fun setForCamera() {
mClient = EasyPlayerClient(this@HomeActivity, mBinding.surface, null) {
RecordHelper.onFrameAvailable(mBinding.surface)
if (!AppData.hasCameraData()) {
AppData.setCameraData(true)
changeViewStatus()
closeLoadingDialog()
mBinding.surface.holder.addCallback(object : Callback{
override fun surfaceCreated(holder: SurfaceHolder) {
mClient = EasyPlayerClient(this@HomeActivity, mBinding.surface.holder.surface, null) {
RecordHelper.onFrameAvailable(mBinding.surface)
if (!AppData.hasCameraData()) {
AppData.setCameraData(true)
changeViewStatus()
closeLoadingDialog()
}
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
mClient?.play(CAMERA_URL)
}
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
mClient?.play(CAMERA_URL)
override fun surfaceChanged(
holder: SurfaceHolder,
format: Int,
width: Int,
height: Int
) {
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
mClient?.stop()
}
})
// 第一次很慢所以10秒
watchCamera(DELAY_TIME_OPEN_CAMERA)
showLoadingDialog(R.string.connecting_camera)
@ -250,4 +269,14 @@ class HomeActivity : NoOptionsActivity() {
warnDialog?.dismiss()
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.os.Handler
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.utils.BitmapUtils
import com.yinuo.library.vlc.encoder.BaseMovieEncoder.EncoderConfig
@ -32,23 +34,47 @@ object RecordHelper {
mVideoEncoder = MovieEncoder1(CommonApplication.getContext(), width, height, true)
}
fun onFrameAvailable(view: TextureView) {
fun onFrameAvailable(view: SurfaceView) {
if (!mVideoEncoder.isRecording) {
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 {
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)
var bitmap = Bitmap.createBitmap(
width,
height,
Bitmap.Config.ARGB_8888
)
PixelCopy.request(
view.holder.surface, bitmap, { copyResult ->
val nanoTime = System.nanoTime()
if (copyResult == PixelCopy.SUCCESS) {
bitmap?.let {
val overLayBitmap: Bitmap? = TxtOverlay.getOverlayBitmap()
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_height="match_parent">
<TextureView
<SurfaceView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="match_parent" />

@ -378,6 +378,10 @@ public class EasyPlayerClient implements Client.SourceCallBack {
* @return
*/
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)) {
start(url, TRANSTYPE_TCP, 0, Client.EASY_SDK_VIDEO_FRAME_FLAG | Client.EASY_SDK_AUDIO_FRAME_FLAG, "", "", null);
} else {

Loading…
Cancel
Save