简单,高效!EdgerOS 应用中的 Media Center

leecactus0 leecactus0 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

谈起 Node.js,大多数人了解它是一个常见操作系统中的 JavaScript 运行环境,与之对应 EdgerOS 智能边缘计算操作系统也有一个内置的 JavaScript 运行环境 JSRE。而 Node.js 之所以能被广为人知很大程度上是因为它本身的模块系统能为开发者提供大量的模块, 如 fs , http 等。同样,JSRE 也为广大开发者提供了许多高效,易用的模块,Media Center 即为这些模块中的一员。

 

Media Center 解决的问题

当开发人员在开发应用时,时常有媒体资源保存和读取的需求,此时应该使用什么样的文件结构存储这些资源文件,又应该如何高效地索引资源文件?为了解决这个问题,EdgerOS 为爱智应用提供了媒体资源仓库 —— Media Center;爱智应用直接引入这个模块就能非常方便且保存和读取共享的媒体资源。

 

引入方式


const MediaCenter = require('mediacenter');
//or
const MediaCenter = require('async/mediacenter');

支持的 API 列表

 

MediaCenter Class

 

new MediaCenter()

对 MediaCenter 进行实例化,返回一个 MediaCenter 的实例对象。

 

MediaCenter.columns

  • album 表示集合的名称,默认值为 default

  • ext 媒体文件的扩展名

  • acoid 保存媒体文件时的用户 ID

  • app 哪个应用程序保存了这个媒体文件

  • digest 媒体文件 MD5 校验值

  • time 保存文件时指定的时间

  • size 文件的大小,以 byte 为计量单位

 

可以使用这些字段对媒体资源进行联合搜索。

示例如下:


const MediaCenter = require('mediacenter')
console.log(MediaCenter.columns)

/** 输出内容如下:
[
    { name: 'album',  type: 'text' },
    { name: 'ext',    type: 'text' },
    { name: 'acoid',  type: 'text' },
    { name: 'app',    type: 'text' },
    { name: 'digest', type: 'text' },
    { name: 'time',   type: 'integer' },
    { name: 'size',   type: 'integer' }
];
*/

当我们进行查询操作时,可以使用上述的这些字段进行联合查询,这个相当于 SQL 语句中的  WHERE 子句,亦可使用 ORDER BY 进行排序。

 

MediaCenter Object

mediacenter.total(callback[, condition])

  • callback {Function} 回调函数

    • error {Error} 错误处理

  • total {Integer} 媒体资源的总数

  • condition {String} 统计搜索条件. 默认为:unconditional

 

可以用来统计满足相关条件的媒体资源数量。

示例如下:


var mediacenter = new MediaCenter();

mediacenter.total(function(error, count) {
    if (error) {
            console.error(error.message);
    } else {
            console.log('Total number:', count);
    }
});

// 增加 WHERE 子句条件
mediacenter.total(function(error, count) {
    if (error) {
            console.error(error.message);
    } else {
            console.log('Number of default album:', count);
    }
}, `album='default'`);

mediacenter.albums(callback[, condition])

  • callback {Function} 回调函数

    • error {Error} 错误处理

  • list {Array} 媒体集合列表.

  • condition {String} 统计搜索条件. 默认为:unconditional

 

在指定条件下从媒体中心获取媒体集合列表。

示例如下:


mediacenter.albums(function(error, list) {
    if (Array.isArray(list)) {
        console.log('All albums:', list);
    }
});

    mediacenter.list(callback[, condition[, limit[, offset]]])

    • callback {Function} 回调函数

      • error {Error} 错误处理

    • list {Array} 媒体集合列表.

    • condition {String} 统计搜索条件. 默认为:unconditional

    • limit {Integer} 查询数量限制,默认为:unlimit

      • offset {Integer} 开始查询的位置,默认为:0

       

      获取媒体资源描述信息列表,列表中的每个成员包含以下内容:

      • id {Integer} 媒体资源的 ID

      • ext {String} 媒体资源的扩展名

      • size {Integer} 原始资源的大小

      • digest {String} 媒体文件 MD5 校验值

      示例如下:

       

      
      // 获取前50个媒体资源描述信息
      mediacenter.list(function(error, descs) {
          if (descs) {
              descs.forEach(function(item) {
                  console.log(item.id, item.ext, item.size);
              });
          }
      }, undefined, 50);

      mediacenter.info(id, callback)

      • id {Integer} 媒体资源的 ID

      • callback {Function} 回调函数

        • error {Error} 错误处理

      • info {Object} 媒体资源的信息 获取对应媒体资源的有关信息 info 包含以下内容 :

        • album {String} 所在集合的名称

      • ext {String} 媒体资源的扩展信息

      • acoid {String} 保存媒体文件时的用户 ID

      • app {String} 保存媒体文件的应用

      • digest {String} 媒体文件 MD5 校验值

      • time {Integer} 保存文件时指定的时间

      • size {Integer} 原始资源大小

      • position {Object} 位置信息

      • extra {Object} 保存媒体信息时的自定义信息

       

      如果 position 对象存在,,则 position 包含以下内容:

      • latitude {Integer} 纬度

      • longitude {Integer} 经度

       

      mediacenter.remove(id[, callback])

      • id {Integer} 媒体资源的 ID

      • callback {Function} 回调函数

        • error {Error}错误处理

       

      删除指定 ID 的媒体资源。

      示例如下

      
      // 删除旧的资源
      mediacenter.list(function(error, list) {
          if (list) {
                  mediacenter.remove(list[0].id);
          }
      }, `ORDER BY time ASC`, 1);

      mediacenter.get(id, thumbnail, callback[, opt])

      • id {Integer} 媒体资源的 ID

      • thumbnail {Boolean} 是否获取缩略图

      • callback {Function} 回调函数

        • error {Error} 错误处理

      • stream {ReadStream} 媒体资源的可读流

      • opt {Object} 获取时的设置选项

        • offset {Integer} 视频开始的位置 ,单位为字节

      • length {Integer} 视频长度, 单位为字节,默认为:整个视频文件的大小

       

      获取指定 ID 的媒体资源:当保存媒体资源时,EdgerOS 会自动生成这个资源的缩略图 (音频文件没有缩略图);可以通过设置 thumbnail 参数决定是否要获取缩略图;缩略图为 JPEG 格式。

       

      注意:EdgerOS 严格控制每个应用程序可以并行获取媒体资源的最大范围,典型值为 32,因此不要同时获取超过此限制的媒体资源。

      示例如下:

      
      var dest = fs.createWriteStream('./dest.jpg');
      
      // 获取扩展名为 .jpg 的缩略图
      mediacenter.list(function(error, list) {
          if (list) {
              mediacenter.get(list[0].id, true, function(e, r) {
                  if (r) {
                      r.pipe(dest);
                  }
              })
          }
      }, `ext='.jpg'`, 1);
      

      注意:opt.offset 和 opt.length 对缩略图选项无效。

       

      mediacenter.save(chunk[, opt], callback, ext)

      • chunk {Buffer} 媒体资源的数据流,保存 chuck 到媒体中心。

        • album {String} 集合的名称, 默认为:"default"

      • acoid {String} 保存媒体文件时的用户 ID

      • position {Object} 位置信息

      • extra {Object} 媒体资源信息保存时的自定义信息

      • opt {Object} 媒体资源选项

      • callback {Function} 回调函数

        • error {Error} 错误处理

      • id {Integer} 媒体资源的 ID

      • ext {String} 媒体资源的扩展名

       

      示例如下:

      
      var chunk = fs.readFile('./aaa.jpg');
      //保存 aaa.jpg 到媒体中心
      mediacenter.save(chunk, function(error) {
          if (error) {
              console.error(error.message);
          } else {
              console.log('Resource save ok!');
          }
      }, '.jpg');

         至此,相信大家对 Media Center 的实现功能已经有一个初步认识,也对其使用方法有了部分了解。希望后期在有机会进行 EdgerOS 的 App 开发时,能对大家有所裨益。如果有要对资源媒体进行存储的需求时,可以想到和使用这个模块。

          ...全文

          相关推荐

          产教融合实训基地与实践中心建设逻辑图-可编辑版

          产教融合实训基地与实践中心建设逻辑图-可编辑版

          龙猫与奥特曼

          idea2025-free.zip

          idea2025-free.zip

          qq_45190508

          sop基于灵敏度分析的有源配电网智能软开关优化配置升级1(Matlab代码实现)

          内容概要:本文提出了一种基于灵敏度分析的有源配电网智能软开关(SOP)优化配置方法,旨在应对高比例分布式电源接入带来的电压波动与网络损耗加剧等问题。研究以IEEE33节点系统为算例,通过改进的灵敏度分析模型量化各节点对电压和功率流动的影响程度,进而构建SOP选址与定容的优化模型,实现降低网损、改善电压分布及提升系统运行灵活性的目标。全文详细阐述了灵敏度指标的数学推导、目标函数与约束条件的建模过程,并基于Matlab实现了完整的仿真求解流程,具备良好的工程实用性与学术参考价值。; 适合人群:电力系统及其自动化、电气工程等相关专业的硕士博士研究生、科研机构研究人员,以及从事智能配电网规划、运行与优化的工程技术人员。; 使用场景及目标:①研究分布式电源大规模接入背景下配电网的主动调控与优化策略;②指导智能软开关在实际配电网中的科学选址与容量配置;③为相关科研课题提供可复现的仿真案例,支撑学术论文撰写与算法验证。; 阅读建议:建议读者结合提供的Matlab代码与IEEE33节点标准模型进行动手实践,重点理解灵敏度指标的物理意义及其在优化模型中的应用逻辑,关注求解过程中的约束设置与算法收敛性,并可进一步拓展至SOP与储能联合配置、多时间尺度优化等复杂场景进行二次开发与研究。

          荔枝科研社

          Ubuntu安装Latex

          关于Ubuntu安装Latex的详细记录和排错指南

          Leers Ting

          高校技术转移办公室人员在成果转化过程中,如何实现科技成果与产业需求的高效对接?.docx

          高校技术转移办公室人员在成果转化过程中,如何实现科技成果与产业需求的高效对接?

          BIZKEEN
          评论
          收藏 已收藏
          分享
          返回顶部