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

MLT多媒体框架生产消费架构解析

  • 前提
  • 通过本文可以获取什么?
  • 核心类解析
    • Service+Filter
    • 为生产者添加滤镜
  • Demon展示
    • 为Producer(MP4)添加Filter(马赛克)效果
    • 代码
  • 附属代码下载链接
  • 参考资料

前提

通过阅读【MLT】MLT多媒体框架生产消费架构解析(一)满足以下两点:

  1. 了解MLT的核心C++封装的层级关系
  2. 掌握使用MLT的Consumer(sdl)消费Producer(MP4)

通过本文可以获取什么?

本文将对【MLT】MLT多媒体框架生产消费架构解析(一)中提到的生产消费流程中的生产者加工环节如何添加视频滤镜做解析,如下图:
【MLT】MLT多媒体框架生产消费架构解析(二)_第1张图片

核心类解析

Service+Filter

【MLT】MLT多媒体框架生产消费架构解析(二)_第2张图片
【MLT】MLT多媒体框架生产消费架构解析(一)中只是简单演示了生产者(初始化了一个视频资源)被消费者(初始化为SDL)消费的简单过程。如上图所示,对生产者加工的过程引入了两个新的封装:Service(服务抽象基类)+ Filter(滤镜抽象服务类)。本节只对我们即将使用的方法做简单介绍,后续会完整对这两个封装作分析。

// 服务抽象基类

/**
* @brief attach 注册滤镜服务的方法
* @param filter 要注册的滤镜服务
* @return 		返回注册的错误码
*/
int attach( Filter &filter );
/**
* @brief detach 反注册滤镜服务的方法
* @param filter 要反注册的滤镜服务
* @return       返回反注册的错误码
*/
int detach( Filter &filter );

为生产者添加滤镜

// 创建马赛克滤镜
Mlt::Filter *filter = new Mlt::Filter(profile, "frei0r.pixeliz0r");
// 使用从父类Service中继承的订阅能力添加滤镜
producer.attach(*filter);

Demon展示

为Producer(MP4)添加Filter(马赛克)效果

代码

    Profile profile; // defaults to dv_pal
    Producer producer(profile, filename);
    Consumer consumer(profile); // defaults to sdl

    Mlt::Filter *filter = new Mlt::Filter(profile, "frei0r.pixeliz0r");
    producer.attach(*filter);

    // 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();

附属代码下载链接

源代码下载链接

参考资料

【1】MLT github链接

你可能感兴趣的:(#,mlt源码解析,架构,音视频,视频编解码,计算机视觉)