媒体文件获取

2023-12-11
暂无评分

概述

通过此接口获取机场媒体文件。可以即时接收航线拍摄的照片和视频更新通知,或获取最近一次航线拍摄的媒体文件列表,从而在机场端对图像进行边缘设备处理。

获取媒体文件

读取机场返航后的媒体文件,并设置文件上传至云端的整体策略。

// 订阅媒体文件更新通知
static ErrorCode MediaFilesUpdateCallback(const MediaFile& file) {
    // TODO: 处理媒体文件更新通知
    return kOk;
}

auto media_manager = MediaManager::Instance();
// 注册机场媒体文件更新通知
media_manager->RegisterMediaFilesObserver(
        std::bind(MediaFilesUpdateCallback, std::placeholders::_1));

// 媒体文件读取初始化
auto media_file_reader = media_manager ->CreateMediaFilesReader();
auto rc = media_file_reader->Init();
if (rc != kOk) {
    ERROR("init media file reader failed");
    rreturn rc;
}

// 打开媒体文件,通过前面注册的通知接口获得媒体文件 file_path 信息
auto fd = media_file_reader->open(media_file.file_path);
if (fd < 0) {
   ERROR("open file failed");
   return kErrorSystemError;
}

// 读取文件内容
do {
	auto nread = media_file_reader->Read(fd, buf, sizeof(buf));
	if (nread > 0) {
	; // TODO: 读取的媒体文件在 buf 中,每次读取的文件大小为 buf 的大小,当读到文件不足 buf 大小时,返回实际读取的大小。
  		// 对一个媒体文件的读取,应该循环读取直到返回数据为实际文件大小(可以通过 MediaFile 的 filesize 字段判断,或者为 0)。
	}
} while (nread > 0);

// 结束文件读取
media_file_read->Close(fd);

设置机场媒体文件策略

上传至云端策略

默认,机场会自动将航线拍摄得到的媒体文件上传至云端。使用下面的接口,您可以更改此设置。

ErrorCode MediaManager::SetDroneNestUploadCloud(bool enable);

注意: 在边缘计算离线超过30秒时,媒体文件上传策略将恢复为默认状态,这时如果存在历史的媒体文件也会上传至云端。

自动删除策略

默认,机场会在上传媒体文件至云端后清除本地缓存。使用下面的接口,您可以更改此设置。当边缘计算需要拉取媒体文件时,应该通过该接口禁止清除本地媒体文件缓存。

    ErrorCode SetDroneNestAutoDelete(bool enable);

注意:

  • 在边缘计算离线超过30秒时,删除策略将恢复为默认状态,历史上传过云端未删除的媒体文件不会被清除。
  • 使用拉取媒体文件功能,禁用机场自动删除媒体文件策略,如长时间不对机场存储空间进行清理,会导致存储空间满影响航线拍摄。可以人工格式化,或在云端通过上云API根据存储空间使用情况进行格式化。

拉取媒体原始文件

初始化媒体文件读取

接口原型: ErrorCode MediaFilesReader::Init()

此接口允许您与机场建立媒体文件传输连接。只有初始化成功后,才能读取到媒体文件。

注意: 该接口内部会设置机场本地媒体文件策略为不删除。

    virtual ErrorCode Init() = 0;

解初始化媒体文件读取

接口原型: ErrorCode MediaFilesReader:DeInit()

此接口允许您断开与机场的媒体文件传输连接。在不需要拉取媒体文件时,可调用该接口断开连接,断开后,如果需要拉取媒体文件需要重新进行初始化。

    virtual ErrorCode DeInit() = 0;

读取原始媒体文件

接口原型: int32_t MediaFilesReader::FileList(MediaFileList &filelist)

该接口获取最近一次航线拍摄的媒体文件列表。

注意: 只有执行的航线进行拍照和录像产生媒体文件,并且设置了不删除策略,才能够通过该接口获取机场媒体文件列表。


接口原型: FdType MediaFilesReader::Open(const std::string &file_path)

该接口打开一个媒体文件。

注意: 参数为媒体文件路径,可以从媒体文件更新通知,或者FileList获取的媒体文件列表中获得。


接口原型:size_t MediaFilesReader::Read(FdType fd, void *buf, size_t count)

该接口读取文件存储在buf中,并且返回读取的有效数据大小。

注意: 参数count表示buf长度,接口会读取count大小的数据并返回,直到文件结尾。


接口原型:  size_t MediaFilesReader::Close(FdType fd)

当读取完数据时,应该通过该接口关闭文件。

返回值描述

返回值描述
kOk操作成功
实际媒体文件个数或实际读取数据的大小操作成功
小于 0操作失败
kErrorSystemError系统错误
kErrorSendPackFailure发送信令失败,请检查机场连接状态
kErrorRemoteFailure远端机场设置失败,请查看日志获取更多信息或联系技术支持
若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。