第十章 多媒体 Multimedia

多媒体(Multimedia)

Qt Multimedia 中的多媒体元素使播放和记录媒体(如声音、视频或图片)成为可能。解码和编码是通过特定于平台的后端处理的。例如,流行的 GStreamer 框架用于 Linux,WMF 用于 Windows,AVFramework 用于 OS X 和 iOS,Android 多媒体 API 用于 Android。

多媒体元素不是 Qt Quick 核心 API 的一部分。相反,它们是通过导入 Qt Multimedia 提供的单独 API 提供的,如下所示:

import QtMultimedia

播放媒体(Playing Media)

QML 应用程序中多媒体集成的最基本案例是播放媒体。 QtMultimedia 模块通过提供一个专用的 QML 组件来支持这一点:MediaPlayer。

MediaPlayer 组件是将媒体源连接到一个或多个输出通道的非可视项。根据媒体的性质(即音频、图像或视频),可以配置各种输出通道。

(一)播放音频(Playing audio)

在以下示例中,MediaPlayer 在空窗口中播放来自本地URL 的 mp3 示例音频文件:

准备工作:

  • 添加一个音频文件资源

QML代码如下:

import QtQuick
import QtMultimedia
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    MediaPlayer {
    id:player
    source: "qrc:/001.mp3"
    audioOutput: AudioOutput{

    }

    Component.onCompleted: {
    player.play()
    }
    }
}

在这个例子中,MediaPlayer 定义了两个属性:

  • source:它包含要播放的媒体的 URL。它可以嵌入 (qrc://)、本地 (file://) 或远程 (https://)。

  • audioOutput:它包含一个音频输出通道,AudioOutput,连接到一个物理输出设备。默认情况下,它将使用系统默认的音频输出设备。

一旦主组件完全初始化,就会调用播放器的播放函数:

Component.onCompleted: {
    player.play()
    }

(二)播放视频(Playing a video)

如果要播放图片或视频等视觉媒体,还必须定义一个 VideoOutput 元素以将生成的图像或视频放置在用户界面中。

在以下示例中,MediaPlayer 播放来自本地 URL 的 mp4 示例视频文件,并将视频内容置于窗口的中心:

准备工作:

  • 添加一个视频文件资源

QML代码如下:

import QtQuick
import QtMultimedia
Window {
    width: 1920
    height: 1080
    visible: true
    title: qsTr("Hello World")

    MediaPlayer {
     id:player
     source: "qrc:/Res/001.mp4"
    audioOutput: AudioOutput{
    }
    videoOutput: vdo

    }

    VideoOutput{
    id:vdo
    anchors.fill: parent
    anchors.margins: 20
    }
    Component.onCompleted: {
      player.play()
    }
}

videoOutput:它包含视频输出通道VideoOutput,表示为在用户界面中显示视频而保留的视觉空间。

请注意,VideoOutput 组件是一个可视项。因此,它必须在可视组件层次结构中创建,而不是在 MediaPlayer 本身中创建。

(三)控制回放(Controlling the playback)

。。。

(四)声音特效(Sound Effects

。。。

(五)视频流(Video Streams)

VideoOutput 元素不限于与 MediaPlayer 元素结合使用。它还可以与各种视频源一起使用以显示视频流。

例如,我们可以使用 VideoOutput 来显示用户相机的实时视频流。为此,我们将把它与两个组件结合起来:Camera 和 CaptureSession。

QML代码如下:

import QtQuick
import QtMultimedia

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    CaptureSession{
        id:capturesession
        camera: Camera{

        }

    videoOutput: output
    }
    VideoOutput{
      id:output
      anchors.fill: parent
    }
    Component.onCompleted: capturesession.camera.start()
}

CaptureSession 组件提供了一种简单的方法来读取摄像机流、捕获静止图像或录制视频。

作为 MediaPlayer 组件,CaptureSession 元素提供了一个 videoOutput 属性。因此我们可以使用这个属性来配置我们自己的可视化组件。

最后,当应用程序加载完毕后,我们就可以开始摄像了:

Component.onCompleted: captureSession.camera.start()

根据您的操作系统,此应用程序可能需要敏感的访问权限。如果您使用 qml 二进制文件运行此示例应用程序,将自动请求这些权限。 但是,如果您将其作为独立程序运行,您可能需要首先请求这些权限(例如:在 MacOS 下,您需要一个与应用程序捆绑在一起的专用 .plist 文件)。

(六)拍摄图像(Capturing Images)

机元素的主要功能之一是可用于拍照。我们将在一个简单的定格动画应用程序中使用它。通过构建应用程序,您将学习如何显示取景器、在相机之间切换、拍摄照片以及跟踪拍摄的照片。

。。。

最后更新于

这有帮助吗?