代码拉取完成,页面将自动刷新
#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;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。