小编0xb*_*00d的帖子

如何使用QMediaPlayer播放流

我已经设置了服务器和视频流,以便我可以使用以下命令行使用ffplay连接到流:

ffplay rtmp://<IP>/path
Run Code Online (Sandbox Code Playgroud)

是否可以使用QMediaPlayer QMediaContent或其他东西连接到此流?

或者也许我可以使用ffserver创建任何其他类型的流.

使用与ffplay相同的路径导致"不支持的url方案!"

通过进一步的实验,我尝试了ffserver http服务器流,但结果是在MFStreamer :: doRead()中Qt崩溃

显然它应该为MFStreamer调用BeginRead,但事实并非如此.

如何使用QMediaPlayer播放视频流?

编辑:这是我的代码

videotest.cpp

#include "videotest.h"
#include <QVBoxLayout>
#include <QVideoWidget>
#include <qmediaplayer.h>
#include <QMediaContent>
#include <QNetworkAccessManager>
#include <QNetworkReply>

struct VideoTest::Private
{
    QMediaPlayer * mediaPlayer;
    QNetworkAccessManager * networkAccessManager;
    QNetworkReply * reply;
};

VideoTest::VideoTest(QWidget *parent)
    : QMainWindow(parent)
{
    d = new Private;
    d->mediaPlayer = new QMediaPlayer(this, QMediaPlayer::StreamPlayback);
    d->networkAccessManager = new QNetworkAccessManager(this);
    ui.setupUi(this);

    QVideoWidget * videoWidget = new QVideoWidget(ui.centralWidget);
    videoWidget->show();
    QPalette palette = videoWidget->palette();
    palette.setColor(QPalette::Background, QColor(0, 0, 0));
    videoWidget->setPalette(palette);

    ui.videoLayout->addWidget(videoWidget);
    d->mediaPlayer->setVideoOutput(videoWidget);

    connect(ui.playButton, …
Run Code Online (Sandbox Code Playgroud)

c++ video qt rtmp ffserver

12
推荐指数
1
解决办法
7168
查看次数

在32位XP上分配超过1 GB的内存

我遇到了一个奇怪的问题,我的过程不能分配比看起来略低于1 GiB的东西.当我的软件发出bad_alloc异常时,Windows任务管理器"内存使用情况"列显示接近1 GiB的值.是的,我检查传递给内存分配的值是否合理.(不存在会导致此失败的竞争条件/腐败).是的,我需要所有这些记忆而没有办法解决它.(它是图像的缓冲区,无法进一步压缩)

我不打算一次性分配整个1 GiB内存,有几个分配大约300 MiB.这会引起问题吗?(我会试着看看更小的分配是否更好).是否有一些编译器开关或我必须设置的其他东西才能超过1 GiB?我见过其他人抱怨2 GiB限制,这对我来说没问题.我只需要多一点:).我正在使用VS 2005和SP1,我在32位XP上运行它,它是用C++编写的.

c++ memory windows memory-management visual-studio

10
推荐指数
1
解决办法
2614
查看次数

CMake include_directories 用于自定义目标类型

我有一个带有 .cpp 和 .h 源文件的自定义目标。正常情况下,这些文件包含其他头文件。我想添加一个目录来查找头文件。

到目前为止,这听起来可能很简单,但这里有一个转折点。我正在使用自定义目标和自定义命令来编译和链接程序。实际编译器需要另一种类型的项目文件,该文件与 CMake 不兼容。

如果我尝试将包含目录添加到当前目标,则会出现以下错误:

target_include_directories called with non-compliant target type.
Run Code Online (Sandbox Code Playgroud)

我认为这可能的原因是您可以在我从 CMake 创建的 Visual Studio 项目中添加头文件查找路径。我不想这样做,因为它不持久,我团队中的每个人也都必须这样做。更糟糕的是,我必须向他们解释……(颤抖)


编辑:

为了回答评论,我正在生成 Visual Studio 2017 项目文件。我的自定义目标命令只是:

add_custom_target(APP
DEPENDS ${APP_DEPENDENCIES}
SOURCES ${APP_DEPENDENCIES}
)
Run Code Online (Sandbox Code Playgroud)

我的自定义命令是:

add_custom_command(
OUTPUT "${LIB_COMPILE_DIR}/libAPP.a"
DEPENDS ${LIB_COMPILE_SRCS}
COMMAND gbuild -top ${LIB_COMPILE_DIR}/App.gpj
WORKING_DIRECTORY ${LIB_COMPILE_DIR}
)
Run Code Online (Sandbox Code Playgroud)

我知道 CMake 有一个 GHS MULTI 生成器,但它是相当实验性的,在我的情况下不起作用。

cmake

7
推荐指数
1
解决办法
2937
查看次数

如何比较两个 std::any?

std::any 没有运算符 ==

我是否错过了一些明显的事情,或者我是否需要真正谋生?

有没有一些简单的方法来提供操作员?

https://godbolt.org/z/rdoWrcnTs

// Example program
#include <iostream>
#include <string>
#include <any>

int main()
{
    auto str1 = std::make_any<std::string> ("Hello");
    auto str2 = std::make_any<std::string> ("World");
    
    if(str1 == str2) std::cout << "same"; // error
}
Run Code Online (Sandbox Code Playgroud)

c++ c++17

7
推荐指数
1
解决办法
2311
查看次数

我可以使用多线程更快地分配内存吗?

如果我创建一个保留 1kb 整数数组 int[1024] 的循环,并且我希望它分配 10000 个数组,我可以通过从多个线程运行内存分配来使其更快吗?

我希望它们在堆中。

让我们假设我有一个多核处理器来完成这项工作。

我已经尝试过这个,但它降低了性能。我只是想知道,我只是编写了错误的代码还是我对内存分配不了解?

答案是否取决于操作系统?如果是这样,请告诉我它在不同平台上的工作方式。

编辑:

整数数组分配循环只是一个简化的例子。不要打扰告诉我如何改进它。

c++ dynamic-memory-allocation

6
推荐指数
1
解决办法
1942
查看次数

MinGW"make"开始得很慢

在经历了一些痛苦和痛苦之后,我设法安装MinGW所需的一切,以便在不在网络上的计算机上工作.

它工作了几天很好,但是现在我经历了很长的延迟,在我发出"make"命令来构建我的项目之后发生任何事情.

我尝试禁用网络,如下所示:为什么MinGW非常慢? 但它没有帮助.

请注意,实际的编译/链接进度并不是很慢,但这些进程的启动似乎需要永远.5-10分钟.除非我刚刚做了,否则它会在10-30秒内开始.

我知道,在Commodore上加载这些磁带需要花费更长的时间,但多年来我已经变得不耐烦了.

有任何想法吗?

performance mingw makefile

6
推荐指数
1
解决办法
2318
查看次数

QReadWriteLock递归

我在递归模式下使用QReadWriteLock。

这段代码本身没有意义,但是我从这里出现的问题是:

lock->lockForWrite();
lock->lockForRead();
Run Code Online (Sandbox Code Playgroud)

lockForRead被阻止。请注意,这是在递归模式下。

我看到的方式是Write是一个“高级”锁,它允许我读写受保护的数据,而Read锁仅允许读取。

另外,我认为如果唯一的阅读器是同一位要求写锁定的读者,则不应阻止写锁定。

从qreadwritelock.cpp源代码中可以看到,没有尝试使其像我想要的那样工作。因此,这不是错误,而是我发现缺少的功能。

我的问题是,应该允许这种递归吗?这种实现会带来什么问题吗?它们将是什么?

c++ qt mutex readwritelock qthread

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

选择单元格时,更改QTableView中图标的颜色突出显示

在QTableView中选择单元格时,其中的图标将显示为蓝色突出显示,如何控制此突出显示的颜色或禁用它?

我尝试设置QPalette :: Highlight但它没有用.

编辑:

好的,所以我知道如何更改背景颜色和文本颜色和颜色突出显示,但不知道如何更改图标.如果我返回一个图标作为单元格的装饰,则在选择单元格时会给它一个浅蓝色突出显示.我该如何删除?

c++ user-interface qtableview

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

PIMPL const正确性

.H

public:
    void doStuff() const;
private:
    struct Private;
    Private * d;
Run Code Online (Sandbox Code Playgroud)

的.cpp

struct XX::Private
{
    int count;
}

void XX::doStuff() const
{
    d->count = 2; // I want an error here!!
}
Run Code Online (Sandbox Code Playgroud)

你需要更好的解释吗?

更新:

我以为我会做一些不同的事情,需要对代码进行较少的更改.我做的:

.H

template <class TPriv>
class PrivatePtr
{
    public:
        ...
        TPriv * const operator->();
        TPriv const * const operator->() const;
        ...
    private:
        TPriv * m_priv;
};
Run Code Online (Sandbox Code Playgroud)

的.cpp

...

template <class TPriv>
TPriv * const PrivatePtr<TPriv>::operator->()
{
    return m_priv;
}

template <class TPriv>
TPriv const * const …
Run Code Online (Sandbox Code Playgroud)

c++ pimpl-idiom

4
推荐指数
1
解决办法
956
查看次数

创建 AVPacket 结构的副本

我想制作一个 AVPacket 的副本,以便以后可以在我喜欢的时候对其进行解码。

AVPacket 来自音频流。

av_dup_packet 似乎不起作用。

AVPacket 复制构造函数不起作用。

创建我自己的复制构造函数会导致内存损坏。

c++ libavcodec

2
推荐指数
1
解决办法
5561
查看次数

更改浮点数字节顺序的最正确方法是什么

读完这篇文章:http ://commandcenter.blogspot.fi/2012/04/byte-order-fallacy.html

文章中的方法是这样的:

从大端读取:

int i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);
Run Code Online (Sandbox Code Playgroud)

从小端读取:

int i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将这种思想转换为浮点数吗?

那么有什么办法可以避免if(swap_needed) swap(data);

我的一个想法是从数据中单独读取符号位、尾数和指数,并根据它们计算浮点值。

c++ endianness

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

QTableView 如何突出显示鼠标悬停的整行?

选择行为设置为选择行,但仅突出显示悬停的单元格。有没有办法突出显示整行?

c++ user-interface qt qtableview

0
推荐指数
1
解决办法
2612
查看次数