码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【MLT】MLT多媒体框架生产消费架构解析(一)


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

    • 通过本文可以获取什么?
    • 核心类层级关系
    • 生产消费者架构
      • 生产者初始化
      • 消费者初始化
      • 生产消费关联启动
    • demon展示
      • 使用Consumer(sdl)消费Producer(mp4)效果
      • 代码
    • 附属代码下载链接
    • 参考资料

    通过本文可以获取什么?

    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);
    
    • 1
    • 2
    • 3
    • 4

    消费者初始化

    // 默认初始化为sdl
    Consumer consumer(profile); 
    
    // 防止缩小到 profile 配置的尺寸.
    // 让 sdl consumer 做所有的缩放.
    consumer.set("rescale", "none");
    
    // 在文件结束时自动退出.
    consumer.set("terminate_on_pause", 1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    生产消费关联启动

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    附属代码下载链接

    源代码下载链接

    参考资料

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

  • 相关阅读:
    使用python备份博客数据并自动备份至百度网盘
    深入探讨栈数据结构:定义、特性和应用
    [附源码]计算机毕业设计JAVA点餐系统
    AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
    [FSCTF 2023] web题解
    【JavaSe笔记】——final关键字,常量,抽象类的定义使用和特征
    回文字符串与动态规划
    如何理解FFT中的频谱泄露效应?
    数据结构和算法之快速排序
    Java写的滑雪爱好者组织活动,预约活动,参与竞赛系统源码
  • 原文地址:https://blog.csdn.net/MichaelKongChina/article/details/126061744
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号