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

获取媒体文件
读取机场返航后的媒体文件,并设置文件上传至云端的整体策略。
// 订阅媒体文件更新通知
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 | 远端机场设置失败,请查看日志获取更多信息或联系技术支持 |