zoukankan      html  css  js  c++  java
  • EasyDSS RTMP流媒体解决方案之直播录像自动清理方案

    本文转自Marvin的博客:
    http://blog.csdn.net/marvin1311/article/details/78660592

    EasyDSS_Solution直播录像清理

    直播录像,可以根据配置将过期的录像清理,支持如下条件:

    1. 设定自动删除录像的时间,单位(天);
    2. 每次启动服务后,一分钟后如果开启清理都会检查清理;
    3. 默认设定每天凌晨3点执行检查清理任务;
    4. 更新参数设定时,都会会在一分钟内判断执行一次检查清理;
    5. 默认是关闭直播录像清理;

      这样可以解决几种场景
      (1)凌晨执行,降低资源消耗;
      (2)改变参数时检查,可以根据最新参数清理无效录像文件,及时减少空间;
      (3)启动服务自动检测,及时减少空间;

    下面会讲下操作设定,及相关的一些编码实现;

    1. 参数设定

    默认参数是0,默认关闭录像清理
    这里写图片描述

    这里写图片描述

    2.相关编码

    2.1.定时任务

     setInterval(function() {
            //每分钟执行一次,判读是否到凌晨3点
            if (currentLiveRecordDays != parseInt(global.live_record_days)) {
                //第一次启动后一分钟执行
                currentLiveRecordDays = parseInt(global.live_record_days);
                if (currentLiveRecordDays != 0) {
                    removeRecordFile();
                }
            } else {
                if (currentLiveRecordDays != 0) {
                    //判读是否达到时间
                    if (!isStartRecordRemove && parseInt(util.dateFormat(new Date(), "hh")) == 3) {
                        isStartRecordRemove = true;
                        removeRecordFile();
                    }
                    if (isStartRecordRemove && parseInt(util.dateFormat(new Date(), "hh")) != 3) {
                        isStartRecordRemove = false;
                    }
                }
            }
        }, 60000);

    2.2.比较日期,判断是否过期

    function isOverdue(yyyyMMdd) {
        var days = currentLiveRecordDays;
        var tNow = new Date().getTime();
        var yyyy = parseInt(yyyyMMdd.substring(0, 4));
        var mm = parseInt(yyyyMMdd.substring(4, 6)) - 1;
        var dd = parseInt(yyyyMMdd.substring(6));
        var tFile = new Date(yyyy, mm, dd).getTime();
        var t = tNow - tFile;
        return t >= days * 3600 * 24 * 1000;
    }

    2.3.删除录像文件方法

    遍历删除文件夹里所有子文件

    var deleteFolder = function(path) {
        var files = [];
        if (fs.existsSync(path)) {
            files = fs.readdirSync(path);
            files.forEach(function(file, index) {
                var curPath = path + "/" + file;
                if (fs.statSync(curPath).isDirectory()) { 
                    deleteFolder(curPath);
                } else { 
                    fs.unlinkSync(curPath);
                }
            });
            fs.rmdirSync(path);
        }
    };

    感谢你的阅读,更多内容会不断分享~

    获取更多信息

    QQ交流群:560148162

    WEB:www.easydss.com

    Copyright © EasyDSS.com 2012-2017

  • 相关阅读:
    js数字格式化(加千分位逗号)
    [css]解决iframe在ios设备上无法滚动
    判断当前是否在微信浏览器环境
    TortoiseGit 提交代码每次需要输入用户名和密码?
    如何编写jQuery插件
    函数作用域
    HTTP动词
    如何减少全局变量污染?
    mysql表大字段最大长度限制设置
    update left join 多表关联更新
  • 原文地址:https://www.cnblogs.com/babosa/p/9217720.html
Copyright © 2011-2022 走看看