我需要播放一个自定义AVI文件,其中包含经典视频流,音频流以及自定义数据流.
自定义流包含由某些自定义小部件可视化的数据; 这些小部件只需要在适当的时间将每个自定义帧写入缓冲区.
我们的应用程序基于Qt,并且已经使用QMediaPlayer/ QVideoWidget播放传统视频,但额外的自定义流使事情变得更复杂,因为AFAIK QMediaPlayer只播放视频/音频并忽略其他所有内容.
我想避免重新发明整个qt-multimedia,但我不知道如何充分利用可用的Qt类.
我到目前为止的想法是:
编写一个自定义媒体播放器类,使用解复用和解码视频ffmpeg,实现定时,QAudioOutput用于播放音频,生成QVideoFrame要在视频上播放的s 流,并将自定义数据写入某个缓冲区以进行可视化.
问题:为了避免编写代码来重新缩放/转换视频帧,我想重用QVideoWidget,但它似乎只适用于"真实" QMediaPlayer.
将输入文件解复用并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)我在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
正如我在 Qt6 中看到的,不再有多媒体 API。我对吗?在 Qt6 中对于播放声音这样简单的任务,我现在应该查看第三方库是否正确?
我试图从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)
关于我可能做错什么的任何想法?
我正在尝试在不进行任何修改的情况下运行 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) 我是qml的新手.我想知道视频是如何在qml中播放的.如何在后端处理视频(负责视频播放的类和模块).如何添加自定义播放器以QML播放视频?这有什么文件吗?是否有任何编写qt-plugin用于视频播放的教程.
我不知道从哪里开始看?请帮忙.提前致谢.
我正在编写一个应用程序,允许用户浏览打开的视频。使用 Qt 5.3 在 Windows 7/8 上进行开发,我一直在使用QMediaPlayer并QVideoWidget遵循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?有没有更好的方法来实现视频中的平滑擦洗?
感谢您的帮助!
我已经下载了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
我发现的所有相关问题都无济于事.
我正在尝试学习 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)
如果没有 …
我正在尝试使用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)