desc:存储空间不足的时候,自动删除早期的视频

main
xiaowusky 1 year ago
parent ef34bfe79e
commit 6cd8691502

@ -30,7 +30,7 @@ const val GAS_CLOUD_UPLOAD_SIZE_ONCE = 20
const val HEARTBEAT_TIME = 10000L const val HEARTBEAT_TIME = 10000L
//存储告警阈值 //存储告警阈值
const val STORAGE_WARN_THRESHOLD_NVME = 30 const val STORAGE_WARN_THRESHOLD_NVME = 10
//没有nvme的时候存储告警阈值 //没有nvme的时候存储告警阈值
const val STORAGE_WARN_THRESHOLD = 3 const val STORAGE_WARN_THRESHOLD = 2

@ -4,12 +4,18 @@ import android.annotation.SuppressLint
import android.app.IntentService import android.app.IntentService
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.common.commonlib.db.DBUtils
import com.common.commonlib.net.callback.RequestResultCallBack import com.common.commonlib.net.callback.RequestResultCallBack
import com.common.commonlib.utils.LogUtils
import com.yinuo.safetywatcher.watcher.bean.GetRtspUrlResponse import com.yinuo.safetywatcher.watcher.bean.GetRtspUrlResponse
import com.yinuo.safetywatcher.watcher.constant.HEARTBEAT_TIME import com.yinuo.safetywatcher.watcher.constant.HEARTBEAT_TIME
import com.yinuo.safetywatcher.watcher.net.DevicesApi import com.yinuo.safetywatcher.watcher.net.DevicesApi
import com.yinuo.safetywatcher.watcher.utils.LztekUtil import com.yinuo.safetywatcher.watcher.utils.LztekUtil
import com.yinuo.safetywatcher.watcher.utils.SimHelper import com.yinuo.safetywatcher.watcher.utils.SimHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.io.File
import java.io.IOException import java.io.IOException
import java.net.InetSocketAddress import java.net.InetSocketAddress
import java.net.Socket import java.net.Socket
@ -54,9 +60,16 @@ class HeartbeatService : IntentService("HeartbeatService") {
var heartConter = -1 var heartConter = -1
private fun checkAndUpdateTrafficInfo() { private fun checkAndUpdateTrafficInfo() {
if (heartConter >= 0) { if (heartConter >= 0) {
devicesApi.updateTrafficInfo() // 拿不到流量信息, 暂时注释
// 设置heartConter为-20下次再10分钟后触发 // devicesApi.updateTrafficInfo()
heartConter = -20 // 设置heartConter为-60下次再10分钟后触发
heartConter = -60
// 检测剩余空间大小,如果空间不足,则自动删除早期视频
val cardAvailableSize = LztekUtil.getCardAvailableSizeWeak()
if (cardAvailableSize) {
delSomeVideo()
}
} }
} }
@ -97,4 +110,18 @@ class HeartbeatService : IntentService("HeartbeatService") {
false false
} }
} }
private fun delSomeVideo() {
GlobalScope.launch(Dispatchers.Unconfined) {
val videoDao = DBUtils.videoDao()
val oldVideo = videoDao.getOldVideo()
try {
oldVideo?.forEach {
File(it.path).delete()
}
} catch (e: Exception) {
LogUtils.v("delSomeVideo error, ${e.message}")
}
}
}
} }

@ -6,7 +6,6 @@ import android.os.Process
import android.view.View import android.view.View
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.Warning import com.common.commonlib.db.entity.Warning
import com.common.commonlib.utils.LogUtils import com.common.commonlib.utils.LogUtils
import com.common.commonlib.utils.NetworkHelper import com.common.commonlib.utils.NetworkHelper
@ -25,7 +24,6 @@ import com.yinuo.safetywatcher.watcher.services.HeartbeatService
import com.yinuo.safetywatcher.watcher.ui.view.ConfirmDialog import com.yinuo.safetywatcher.watcher.ui.view.ConfirmDialog
import com.yinuo.safetywatcher.watcher.utils.BatteryHelper import com.yinuo.safetywatcher.watcher.utils.BatteryHelper
import com.yinuo.safetywatcher.watcher.utils.GPIOUtils import com.yinuo.safetywatcher.watcher.utils.GPIOUtils
import com.yinuo.safetywatcher.watcher.utils.LztekUtil
import com.yinuo.safetywatcher.watcher.utils.RecordHelper import com.yinuo.safetywatcher.watcher.utils.RecordHelper
import com.yinuo.safetywatcher.watcher.utils.SimHelper import com.yinuo.safetywatcher.watcher.utils.SimHelper
import com.yinuo.safetywatcher.watcher.utils.WifiHelper import com.yinuo.safetywatcher.watcher.utils.WifiHelper
@ -35,7 +33,6 @@ import kotlinx.coroutines.launch
import org.easydarwin.PushHelper import org.easydarwin.PushHelper
import org.easydarwin.TxtOverlay import org.easydarwin.TxtOverlay
import org.easydarwin.video.EasyPlayerClient import org.easydarwin.video.EasyPlayerClient
import java.io.File
class HomeActivity : NoOptionsActivity() { class HomeActivity : NoOptionsActivity() {
@ -90,16 +87,6 @@ class HomeActivity : NoOptionsActivity() {
itemSetting.requestFocus() itemSetting.requestFocus()
} }
} }
val cardAvailableSize = LztekUtil.getCardAvailableSizeWeak()
if (cardAvailableSize) {
warnDialog =
ConfirmDialog("检测倒系统剩余存储空间较小,将影响视频录制,是否删除部分早期录像腾出空间?") {
warnDialog?.dismiss()
delSomeVideo()
}
warnDialog?.show(supportFragmentManager, "warn")
}
} }
private fun onCameraOpen() { private fun onCameraOpen() {
@ -279,20 +266,6 @@ class HomeActivity : NoOptionsActivity() {
SimHelper.init(this@HomeActivity) SimHelper.init(this@HomeActivity)
} }
private fun delSomeVideo() {
GlobalScope.launch(Dispatchers.IO) {
val videoDao = DBUtils.videoDao()
val oldVideo = videoDao.getOldVideo()
try {
oldVideo?.forEach {
File(it.path).delete()
}
} catch (e: Exception) {
LogUtils.v("delSomeVideo error, ${e.message}")
}
}
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
BatteryHelper.release(this@HomeActivity) BatteryHelper.release(this@HomeActivity)

@ -3,6 +3,7 @@ package com.common.commonlib.db.dao
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Delete import androidx.room.Delete
import androidx.room.Insert import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query import androidx.room.Query
import androidx.room.Update import androidx.room.Update
import com.common.commonlib.db.entity.Video import com.common.commonlib.db.entity.Video
@ -18,7 +19,7 @@ interface VideoDao {
@Query("SELECT * FROM video LIMIT 50") @Query("SELECT * FROM video LIMIT 50")
suspend fun getOldVideo(): List<Video> suspend fun getOldVideo(): List<Video>
@Insert @Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(video: Video) suspend fun insert(video: Video)
@Insert @Insert

@ -39,7 +39,7 @@ object StorageUtils {
// nvme // nvme
if (!isUsb) { if (!isUsb) {
// 大于400GB的也当硬盘看待 // 大于400GB的也当硬盘看待
if (containsNvmeKeys(userLabel) || getSizeInGB(path) > 400) { if (containsNvmeKeys(userLabel)) {
targetpath = path targetpath = path
} }
} else { } else {

@ -43,6 +43,10 @@ public class AndroidMuxer {
long timeMillis = System.currentTimeMillis(); long timeMillis = System.currentTimeMillis();
File output = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, timeMillis, DEFAULT_RECORD_DURATION); File output = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, timeMillis, DEFAULT_RECORD_DURATION);
if (output != null) { if (output != null) {
// 防止时间错乱,文件重复
if (output.exists()) {
output.delete();
}
mCurrentPath = output.getAbsolutePath(); mCurrentPath = output.getAbsolutePath();
LogUtils.v(String.format("startRecording: %s", output)); LogUtils.v(String.format("startRecording: %s", output));
mMuxer = new MediaMuxer(mCurrentPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); mMuxer = new MediaMuxer(mCurrentPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

Loading…
Cancel
Save