照着这里的文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/audio-video-demuxer-V5
下面的duration输出为0:
for (uint32_t index = 0; index < track_count; ++index) {
OH_AVFormat *track_format = OH_AVSource_GetTrackFormat(av_source_, index);
if (!track_format) {
XLOG_ERROR("OH_AVSource_GetTrackFormat failed");
if (error) {
*error = MAKE_ERROR(kErrorDomainDecode, kErrorCodeGetTrackFormatFailed);
}
return;
}
OH_AVFormat_GetIntValue(track_format, OH_MD_KEY_TRACK_TYPE, &track_type);
OH_MediaType media_type = static_cast<OH_MediaType>(track_type);
if (media_type == OH_MediaType::MEDIA_TYPE_VID) {
{
int64_t duraion;
OH_AVFormat_GetLongValue(track_format, OH_MD_KEY_DURATION, &duraion);
XLOG_INFO("video duration: %lld", duraion);
}
{
int32_t duraion;
OH_AVFormat_GetIntValue(track_format, OH_MD_KEY_DURATION, &duraion);
XLOG_INFO("video duration: %d", duraion);
}
{
double duration;
OH_AVFormat_GetDoubleValue(track_format, OH_MD_KEY_DURATION, &duration);
XLOG_INFO("video duration: %f", duration);
}
} else {
{
int64_t duraion;
OH_AVFormat_GetLongValue(track_format, OH_MD_KEY_DURATION, &duraion);
XLOG_INFO("audio duration: %lld", duraion);
}
{
int32_t duraion;
OH_AVFormat_GetIntValue(track_format, OH_MD_KEY_DURATION, &duraion);
XLOG_INFO("audio duration: %d", duraion);
}
{
double duration;
OH_AVFormat_GetDoubleValue(track_format, OH_MD_KEY_DURATION, &duration);
XLOG_INFO("video duration: %f", duration);
}
}
}
目前系统只提供文件的时长,从soruce\_format获取,没有提供轨道的时长。