码农知识堂 - 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】官方代码示例

  • 相关阅读:
    【附源码】计算机毕业设计SSM设计与实现大学常规信息管理系统
    【软考 系统架构设计师】案例分析⑥ Web应用系统架构设计
    用于强化学习的置换不变神经网络
    Django——ORM增删改查
    visjs 数据的增删改筛选(DataSet & DataView)
    Spring事务实现原理和工作原理
    Webrtc支持FFMPEG硬解码之解码实现(三)
    数据库访问-records库
    Clion 中文输入的问题
    jmeter 压测脚本JMX
  • 原文地址:https://blog.csdn.net/MichaelKongChina/article/details/126061744
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号