我试图让自己成为一个 QML 相机项目,它具有更多功能,并为VideoOutput元素提供源。比如这个:
VideoOutput{
source:mycamera
}
MyCustomCamera{
id:mycamera
}
Run Code Online (Sandbox Code Playgroud)
如果您要扩展自己的 C++ 类以与 VideoOutput 互操作,您可以提供一个基于 QObject 的类,该类具有一个 mediaObject 属性,该属性公开一个 QMediaObject 派生类,该类具有一个 QVideoRendererControl 可用,或者您可以提供一个基于 QObject 的类与一个可写的 videoSurface 属性可以接受基于 QAbstractVideoSurface 的类,并且可以遵循正确的协议将 QVideoFrames 传递给它。
我试过给我的对象一个私有财产 mediaObject,它是 QCamera 类型,但看起来 QCamera 没有 QVideoRenderControl (或者是我的错,不知道如何正确地做到这一点)。
我要达到我一开始的效果,反正欢迎。
或者,谁能给我一个简短的例子,说明“videoSurace接受 blablabla 并遵循正确协议的可写属性”是什么意思?
我目前正在使用QML制作跨平台应用程序(Android,iOS),我需要进行QR码扫描功能.QR码读数正在使用ZXing,没有问题,问题在于相机.我无法从QCamera中提取视频帧.
有一个模块QVideoProbe应该为我做.但是,它不起作用,不在Win32上,而不在OSX上.它根本无法在桌面平台上运行.我在这台计算机上没有我的代码,但就像我在论坛上找到的这个例子一样
QCamera *camera = new QCamera;
camera->setCaptureMode(QCamera::CaptureVideo);
QCameraViewfinder *viewfinder = new QCameraViewfinder();
camera->setViewfinder(viewfinder);
qDebug() << " start set source";
QVideoProbe *videoProbe = new QVideoProbe(this);
if (videoProbe->setSource((QMediaObject *)camera)) {
qDebug() << " set source succeed";
//Probing succeeded, videoProbe->isValid() should be true.
connect(videoProbe, SIGNAL(videoFrameProbed(const QVideoFrame &)),this,SLOT(detectAVA(const QVideoFrame &)));
}
camera->start();
Run Code Online (Sandbox Code Playgroud)
论坛上的人跟我有同样的问题.这条线:
videoProbe->setSource((QMediaObject *)camera)
Run Code Online (Sandbox Code Playgroud)
会回来的false.
论坛上的答复是:
使用(传递)
Camera元素作为sourceObj,会发生什么?它也会奏效.
那是理论上的.在实践中,它取决于平台.
QVideoProbe并非所有这些(或仅适用于媒体播放器或相机).它应该在doc中,但这里是对
QVideoProbe支持的概述:
- Android:仅适用于相机
- 黑莓:没有支持
- iOS:没有支持
- Linux:仅适用于媒体播放器
- Mac:没有支持
- Windows:仅适用于媒体播放器
如果不支持它并不一定意味着它不可能在给定平台上执行,它可能意味着它当前没有实现.
所以,Android只是支持Camera的平台,那么我在Win32上寻找支持,我愿意在win32下添加支持,这项工作真的很难,我会把它合并到Qt主线.
此外,我将在Android下添加媒体播放器支持.这是我正在寻找的两个功能.
看起来它没有实现,如果这个工作,它只能在Android上工作,我必须在真正的手机上测试它(模拟器不起作用). …