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 STORAGE_WARN_THRESHOLD_NVME = 30
const val STORAGE_WARN_THRESHOLD_NVME = 10
//没有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.content.Context
import android.content.Intent
import com.common.commonlib.db.DBUtils
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.constant.HEARTBEAT_TIME
import com.yinuo.safetywatcher.watcher.net.DevicesApi
import com.yinuo.safetywatcher.watcher.utils.LztekUtil
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.net.InetSocketAddress
import java.net.Socket
@ -54,9 +60,16 @@ class HeartbeatService : IntentService("HeartbeatService") {
var heartConter = -1
private fun checkAndUpdateTrafficInfo() {
if (heartConter >= 0) {
devicesApi.updateTrafficInfo()
// 设置heartConter为-20下次再10分钟后触发
heartConter = -20
// 拿不到流量信息, 暂时注释
// devicesApi.updateTrafficInfo()
// 设置heartConter为-60下次再10分钟后触发
heartConter = -60
// 检测剩余空间大小,如果空间不足,则自动删除早期视频
val cardAvailableSize = LztekUtil.getCardAvailableSizeWeak()
if (cardAvailableSize) {
delSomeVideo()
}
}
}
@ -97,4 +110,18 @@ class HeartbeatService : IntentService("HeartbeatService") {
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 androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope
import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.Warning
import com.common.commonlib.utils.LogUtils
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.utils.BatteryHelper
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.SimHelper
import com.yinuo.safetywatcher.watcher.utils.WifiHelper
@ -35,7 +33,6 @@ import kotlinx.coroutines.launch
import org.easydarwin.PushHelper
import org.easydarwin.TxtOverlay
import org.easydarwin.video.EasyPlayerClient
import java.io.File
class HomeActivity : NoOptionsActivity() {
@ -90,16 +87,6 @@ class HomeActivity : NoOptionsActivity() {
itemSetting.requestFocus()
}
}
val cardAvailableSize = LztekUtil.getCardAvailableSizeWeak()
if (cardAvailableSize) {
warnDialog =
ConfirmDialog("检测倒系统剩余存储空间较小,将影响视频录制,是否删除部分早期录像腾出空间?") {
warnDialog?.dismiss()
delSomeVideo()
}
warnDialog?.show(supportFragmentManager, "warn")
}
}
private fun onCameraOpen() {
@ -279,20 +266,6 @@ class HomeActivity : NoOptionsActivity() {
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() {
super.onDestroy()
BatteryHelper.release(this@HomeActivity)

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

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

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

Loading…
Cancel
Save