1 Star 0 Fork 0

QT第三方项目/mdk-examples

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
MediaInfoReader.cpp 2.13 KB
一键复制 编辑 原始数据 按行查看 历史
LucasWang 提交于 2024-08-22 13:29 +08:00 . api
#include "mdk/Player.h"
#include "mdk/MediaInfo.h"
#include <cinttypes>
#include <cstdio>
#include <future>
#include <optional>
using namespace MDK_NS;
using namespace std;
// loading a media is async. 3 ways to get media info when media is loaded
void test_status_future(const char* url)
{
promise<optional<MediaInfo>> p;
Player player;
player.onMediaStatus([&](MediaStatus oldVal, MediaStatus newVal){
if (flags_added(oldVal, newVal, MediaStatus::Loaded)) {
p.set_value(player.mediaInfo());
} else if (flags_added(oldVal, newVal, MediaStatus::Invalid)) {
p.set_value(nullopt);
}
return false; // unload immediately
});
player.setMedia(url);
player.prepare();
auto fut = p.get_future();
auto info = fut.get();
if (info) {
printf("duration: %" PRId64 "ms\n", info->duration);
}
}
void test_prepare_future(const char* url, int64_t from = 0LL)
{
promise<optional<MediaInfo>> p;
Player player;
player.setMedia(url);
// disable tracks, no decode
player.setActiveTracks(MediaType::Audio, {});
player.setActiveTracks(MediaType::Video, {});
player.prepare(from, [&](int64_t position, bool*){
if (position < 0) { // open error
p.set_value(nullopt);
return false;
}
p.set_value(player.mediaInfo());
return false;
});
auto fut = p.get_future();
auto info = fut.get();
if (info) {
printf("duration: %" PRId64 "ms\n", info->duration);
}
}
void test_state(const char* url)
{
Player player;
player.setMedia(url);
// disable tracks, no decode
player.setActiveTracks(MediaType::Audio, {});
player.setActiveTracks(MediaType::Video, {});
player.prepare(); // will try to demux some packets and decode the first frame if any track is enabled
player.waitFor(State::Paused);
const auto duration = player.mediaInfo().duration;
printf("duration: %" PRId64 "ms\n", duration);
}
int main(int argc, char *argv[])
{
test_status_future(argv[argc - 1]);
test_prepare_future(argv[argc - 1], 90LL);
test_state(argv[argc - 1]);
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/qt-third-party-project/mdk-examples.git
git@gitee.com:qt-third-party-project/mdk-examples.git
qt-third-party-project
mdk-examples
mdk-examples
master

搜索帮助