标签: qtmultimedia

使用QtMultimedia播放自定义avi数据流

我需要播放一个自定义AVI文件,其中包含经典视频流,音频流以及自定义数据流.

自定义流包含由某些自定义小部件可视化的数据; 这些小部件只需要在适当的时间将每个自定义帧写入缓冲区.

我们的应用程序基于Qt,并且已经使用QMediaPlayer/ QVideoWidget播放传统视频,但额外的自定义流使事情变得更复杂,因为AFAIK QMediaPlayer只播放视频/音频并忽略其他所有内容.

我想避免重新发明整个qt-multimedia,但我不知道如何充分利用可用的Qt类.


我到目前为止的想法是:

  1. 编写一个自定义媒体播放器类,使用解复用和解码视频ffmpeg,实现定时,QAudioOutput用于播放音频,生成QVideoFrame要在视频上播放的s 流,并将自定义数据写入某个缓冲区以进行可视化.

    问题:为了避免编写代码来重新缩放/转换视频帧,我想重用QVideoWidget,但它似乎只适用于"真实" QMediaPlayer.

  2. 将输入文件解复用并QMediaPlayer与AV流一起提供. 将输入解复用ffmpeg(可能将解码留给Qt后端),让一个QIODevice只检索输入文件中的视频/音频流,另一个检索数据流.播放视频/音频QMediaPlayer.

                  +-------+                          
                  | QFile |                          
                  +---^---+                          
                      |                              
                   inherits                          
                      |                              
            +--------------------+
            |    MyAviDemuxer    |
            |                    |
            |  holds a queue of  |
            |  demuxed packets   |
            +--------------------+
            |                    |
      readDataPacket      readVideoPacket
            |                    |
    +-------v--------+  +--------v-----------+            +-----------+
    | MyCustomReader | …
    Run Code Online (Sandbox Code Playgroud)

c++ qt ffmpeg qtmultimedia

58
推荐指数
1
解决办法
1772
查看次数

Qt5 VideoOverview示例无效

我在Qt视频概述中给出了一个月的视频示例.

我试过那段代码,但只有我得到的是空白方块(QWidget).我使用GStreamer0.10进行Qt5上的媒体播放.我也用gst-launch-0.10命令播放了视频,它运行正常,但我无法确定Qt中发生了什么以及为什么它不起作用?

我查看了位于的X Server的错误日志/etc/X11/Xorg.0.log,当我使用fbdev作为其中配置的显示驱动程序/etc/X11/xorg.conf时显示错误:

"FBDEV(0):FBIOPUTCMAP:参数无效"

当我使用modesetting驱动程序时,一切都行为相同,但没有错误.我发现,当我删除xorg.conf文件并再次启动X服务器时,视频可以正常工作,但缺少颜色和闪烁也可以在我的Ubuntu VM和vnc客户端上运行良好.我们将非常感谢您的建议和帮助.

  • 目标机器:BeagleBone Black

  • 发行:Debian Jessie 8.2

  • 内核版本:4.1.15-ti-rt-r43

/ usr/lib/xorg/modules/drivers中可用驱动程序列表:ati_drv.so,mach64_drv.so,nouveau_drv.so,r128_drv.so,vesa_drv.so,fbdev_drv.so,modesetting_drv.so,omap_drv.so,radeon_drv.所以

当我尝试在Debian Jessie 8.2下的BeagleBone Black上启动我的Qt应用程序时,这是来自Xorg的完整错误日志 - > http://pastebin.com/4x8KztBk

来自/ etc/X11的xorg.conf文件 - > http://pastebin.com/4WhX8pJc

linux gstreamer qt5 beagleboneblack qtmultimedia

19
推荐指数
1
解决办法
531
查看次数

Qt6 和多媒体模块

正如我在 Qt6 中看到的,不再有多媒体 API。我对吗?在 Qt6 中对于播放声音这样简单的任务,我现在应该查看第三方库是否正确?

qt qtmultimedia qt6

11
推荐指数
1
解决办法
2212
查看次数

QAudioDeviceInfo在Ubuntu上找不到默认音频设备

我试图从QAudioDeviceInfo类引用运行基本示例,但Qt没有找到默认的音频设备.

运行此代码不显示输出:

foreach (const QAudioDeviceInfo &deviceInfo,  QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
    qDebug() << "Device name: " << deviceInfo.deviceName();
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 13.10上使用Qt 5.0.2运行Qt Creator 2.7.1.Qt Multimedia是通过安装的apt-get.我的专业档案有QT += multimedia.我的头文件包括:

#include <QAudio>
#include <QAudioOutput>
#include <QAudioDeviceInfo>
Run Code Online (Sandbox Code Playgroud)

关于我可能做错什么的任何想法?

c++ ubuntu qt qt5 qtmultimedia

8
推荐指数
1
解决办法
3082
查看次数

没有可用于类型“video/x-h264”的解码器

我正在尝试在不进行任何修改的情况下运行 qt 示例应用程序之一。它被称为player,它是一个多媒体小部件演示。我的系统是 Ubuntu 16.04 64 位。当我尝试播放视频时,我在控制台中看到以下错误:

No decoder available for type 'video/x-h264

这是尝试两个不同视频后的完整错误:

Starting /home/aras/Qt5.7.0_Sept2016/Examples/Qt-5.7/multimediawidgets/build-player-Sept2016-Debug/player...
Warning: "No decoder available for type 'video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3, profile=(string)constrained-baseline, codec_data=(buffer)0142e01eff0100192742e01ea9101405ff2e00d418041adb7a00f480f55ef7c04001000428de09c8, width=(int)640, height=(int)360, framerate=(fraction)2997/125, pixel-aspect-ratio=(fraction)1/1'."
Warning: "No decoder available for type 'video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3, profile=(string)constrained-baseline, codec_data=(buffer)0142e01eff0100192742e01ea9101405ff2e00d418041adb7a00f480f55ef7c04001000428de09c8, width=(int)640, height=(int)360, framerate=(fraction)2997/125, pixel-aspect-ratio=(fraction)1/1'."
Warning: "No decoder available for type 'video/x-h264, stream-format=(string)avc, pixel-aspect-ratio=(fraction)1/1, width=(int)1280, height=(int)720, framerate=(fraction)601600/10033'."
Run Code Online (Sandbox Code Playgroud)

我几乎安装了与 gstreamer 远程相关的所有软件包。当我运行时,gst-inspect-1.0我得到了很多输出,最后一行是:

Total count: 241 plugins (1 blacklist entry not shown), 1388 features

~$ gst-inspect-1.0 …
Run Code Online (Sandbox Code Playgroud)

video gstreamer h.264 qt5 qtmultimedia

8
推荐指数
2
解决办法
9081
查看次数

如何在QML中播放视频?

我是qml的新手.我想知道视频是如何在qml中播放的.如何在后端处理视频(负责视频播放的类和模块).如何添加自定义播放器以QML播放视频?这有什么文件吗?是否有任何编写qt-plugin用于视频播放的教程.

我不知道从哪里开始看?请帮忙.提前致谢.

c++ linux qt qml qtmultimedia

5
推荐指数
1
解决办法
2364
查看次数

强制 QMediaPlayer 为视频擦除应用程序准确更新位置?

我正在编写一个应用程序,允许用户浏览打开的视频。使用 Qt 5.3 在 Windows 7/8 上进行开发,我一直在使用QMediaPlayerQVideoWidget遵循qvideowidget示例项目。结果非常好,除了似乎QVideoWidget只在空闲时间更新。尽管如此,这仍然是一个良好的开始并且可用。

然而,当我在 Mac OS 10.10(同样使用 Qt 5.3)上构建时,擦洗的行为就好像视频中每秒只有一帧一样。当我拖动“位置”滑块时,视频会从一帧跳到一秒后的帧,然后再跳一秒,即使我QMediaPlayer::setPosition多次调用这两帧之间的位置。

可以使用videowidgetQt 5.3 附带的示例重现该问题:Qt\Examples\Qt-5.3\multimediawidgets\videowidget。当在 Windows 计算机上拖动滑块时,滑块QVideoWidget会在间隔相当近的帧之间移动。当在 Mac 上(至少在我的)上拖动滑块时,QVideoWidget帧之间的跳转间隔大约为一秒。无论我等待“中间”帧渲染多久,除非我点击“播放”按钮,否则它不会发生。

我尝试过一个接一个地调用QMediaPlayer::play()QMediaPlayer::pause()强制更新,但这似乎不起作用——QMediaPlayer异步工作,因此更新没有时间生效。

如果我检查 的值QMediaPlayer::position,我发现它实际上在这些跳转之间没有改变。看起来,当我调用 时QMediaPlayer::setPosition,它实际上在 Mac 上将位置舍入为一秒增量,在 Windows 计算机上舍入为更精细的增量。

理想情况下,我想跳转到视频中的特定位置并立即在QVideoWidget. 有没有办法强制QMediaPlayer准确设置位置并更新关联QVideoWidget?有没有更好的方法来实现视频中的平滑擦洗?

感谢您的帮助!

c++ qt qmediaplayer qtmultimedia

5
推荐指数
1
解决办法
2737
查看次数

QT中的未知模块:多媒体

我已经下载了qt-everywhere-opensource-src-5.4.1并构建并安装了静态.接下来我构建了QMultimedia并进行了安装.

当包括QT + =多媒体时,我从.pro获得"QT中的未知模块:多媒体".

我在/usr/local/Qt-5.4.1/include中有QtMultimedia,QtMultimediaQuick_p和QtMultimediaWidgets.在/usr/local/Qt-5.4.1/plugins中也有mediaservice,playlistformats在/ usr/include中也有QtMobility,QtMultimediaKit

我正在运行Ubuntu 15.0

我发现的所有相关问题都无济于事.

c++ qt qtmultimedia

5
推荐指数
1
解决办法
5297
查看次数

无法在 Windows 上的 PyQt 5 中导入 QtMultimedia

我正在尝试学习 PyQt5 + qml,到目前为止我尝试过的一切都很好,但是在尝试将 QtMultimedia 导入我的 qml 文件时遇到了一个障碍,导致以下错误:

无法为模块“QtMultimedia”加载插件:无法加载库 D:\py35venvQt\lib\site-packages\PyQt5\Qt\qml\QtMultimedia\declarative_multimedia.dll:找不到指定的模块。

主.qml:

import QtQuick 2.8
import QtQuick.Window 2.2
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.1
import QtMultimedia 5.6

Window {
  id: root
  visible: true
  title: 'my pyqt app'
  width: 1280
  height: 720

}
Run Code Online (Sandbox Code Playgroud)

主文件

if __name__ == '__main__':
    def handleStatusChange(status):
        if status == QQuickView.Error:
            errors = appLabel.errors()
            if errors:
                print (errors[0].description())



    myApp = QApplication(sys.argv)
    appLabel = QQuickView()
    appLabel.statusChanged.connect(handleStatusChange)
    model = models.ActorModel(DB_PATH)
    ctxt = appLabel.rootContext()
    ctxt.setContextProperty('myModel', model)
    appLabel.setSource(QUrl('./qml/main/main.qml'))

    try:
        sys.exit(myApp.exec_())
    except:
        print("Exiting")
Run Code Online (Sandbox Code Playgroud)

如果没有 …

python qt pyqt qml qtmultimedia

5
推荐指数
1
解决办法
3548
查看次数

无法播放视频Qt5多媒体ubuntu 16.04

我正在尝试使用QMediaPlayer类播放视频,但不断收到此错误 -

`GLib-GObject-WARNING **: cannot register existing type 'GstObject'

GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed

 GLib-GObject-CRITICAL **: g_type_register_static: assertion 'parent_type > 0' failed

GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed
 GStreamer-CRITICAL **: gst_pad_get_negotiated_caps: assertion 'GST_IS_PAD (pad)' failed`
Run Code Online (Sandbox Code Playgroud)

使用Qt 5.7,使用ubuntu 16.04.使用安装向导安装了qt(即没有自己构建任何东西),这是我为Gstreamer提供的软件包 -

ii  gir1.2-gstreamer-0.10                       0.10.36-1.5ubuntu1                           amd64        Description: GObject introspection data for the GStreamer library
ii  gir1.2-gstreamer-1.0                        1.8.3-1~ubuntu0.1                            amd64        GObject introspection data for the GStreamer library
ii  gstreamer-qapt                              3.0.2-0ubuntu1.2                             amd64        GStreamer plugin to install codecs using QApt
ii  gstreamer0.10-alsa:amd64 …
Run Code Online (Sandbox Code Playgroud)

c++ video ubuntu qt qtmultimedia

5
推荐指数
1
解决办法
745
查看次数

标签 统计

qtmultimedia ×10

qt ×8

c++ ×6

qt5 ×3

gstreamer ×2

linux ×2

qml ×2

ubuntu ×2

video ×2

beagleboneblack ×1

ffmpeg ×1

h.264 ×1

pyqt ×1

python ×1

qmediaplayer ×1

qt6 ×1