【MLT】MLT多媒体框架生产消费架构解析(一)

通过本文可以获取什么?

  1. 了解LGPL多媒体框架MLT的核心C++类封装的层级关系
  2. 了解MLT的生产消费者架构
  3. demon演示生产-消费的使用

核心类层级关系

MLT官方有为MLT库提供C++包装,根据MLT的设计梳理了核心类的层级关系,如下图:
在这里插入图片描述

如上图可见:整个封装分为4个层级,简单介绍一下关键类的功能:

  1. Properties:这个基类提供了后续所有派生类属性的序列化与反序列化能力
  2. Service:这个服务类将会提供给消费者与生产者连接的能力、滤镜的订阅与反订阅能力等功能。
  3. Producer:生产者类,所有剪辑处理的最小单位。
  4. Playlist:生产者的容器。

生产消费者架构

生产消费基础流程图如下:
在这里插入图片描述

生产者初始化

// 默认视频图像制式设置是dv_pal(PAL特点:每秒钟有25帧,奇数场,主要应用在中国、香港、中东地区和欧洲一带,视频输出常用格式是PAL制式)
Profile profile; 
// 根据profile配置与媒体资源初始化生产者
Producer producer(profile, filename);

消费者初始化

// 默认初始化为sdl
Consumer consumer(profile); 

// 防止缩小到 profile 配置的尺寸.
// 让 sdl consumer 做所有的缩放.
consumer.set("rescale", "none");

// 在文件结束时自动退出.
consumer.set("terminate_on_pause", 1);

生产消费关联启动

// 从Service继承的关联消费者的能力
consumer.connect(producer);
// 启动
consumer.run();
consumer.stop();

demon展示

使用Consumer(sdl)消费Producer(mp4)效果

请添加图片描述

代码

void play(const char *filename)
{
    qDebug() << filename;
    Profile profile; // defaults to dv_pal
    Producer producer(profile, filename);
    Consumer consumer(profile); // defaults to sdl

    // Prevent scaling to the profile size.
    // Let the sdl consumer do all scaling.
    consumer.set("rescale", "none");

    // Automatically exit at end of file.
    // consumer.set("terminate_on_pause", 1);

    consumer.connect(producer);
    consumer.run();
    consumer.stop();
}

void func1()
{
	Factory::init();
	play("D:\\msys64\\home\\Administrator\\mltDemon\\qianyuqianxunKTV.mp4");// 替换自己本地的资源路径
	Factory::close();
}

附属代码下载链接

源代码下载链接

参考资料

【1】MLT github链接
【2】官方代码示例

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一二三o-0-O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值