我已经设置了服务器和视频流,以便我可以使用以下命令行使用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) 我遇到了一个奇怪的问题,我的过程不能分配比看起来略低于1 GiB的东西.当我的软件发出bad_alloc异常时,Windows任务管理器"内存使用情况"列显示接近1 GiB的值.是的,我检查传递给内存分配的值是否合理.(不存在会导致此失败的竞争条件/腐败).是的,我需要所有这些记忆而没有办法解决它.(它是图像的缓冲区,无法进一步压缩)
我不打算一次性分配整个1 GiB内存,有几个分配大约300 MiB.这会引起问题吗?(我会试着看看更小的分配是否更好).是否有一些编译器开关或我必须设置的其他东西才能超过1 GiB?我见过其他人抱怨2 GiB限制,这对我来说没问题.我只需要多一点:).我正在使用VS 2005和SP1,我在32位XP上运行它,它是用C++编写的.
我有一个带有 .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 生成器,但它是相当实验性的,在我的情况下不起作用。
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) 如果我创建一个保留 1kb 整数数组 int[1024] 的循环,并且我希望它分配 10000 个数组,我可以通过从多个线程运行内存分配来使其更快吗?
我希望它们在堆中。
让我们假设我有一个多核处理器来完成这项工作。
我已经尝试过这个,但它降低了性能。我只是想知道,我只是编写了错误的代码还是我对内存分配不了解?
答案是否取决于操作系统?如果是这样,请告诉我它在不同平台上的工作方式。
编辑:
整数数组分配循环只是一个简化的例子。不要打扰告诉我如何改进它。
在经历了一些痛苦和痛苦之后,我设法安装MinGW所需的一切,以便在不在网络上的计算机上工作.
它工作了几天很好,但是现在我经历了很长的延迟,在我发出"make"命令来构建我的项目之后发生任何事情.
我尝试禁用网络,如下所示:为什么MinGW非常慢? 但它没有帮助.
请注意,实际的编译/链接进度并不是很慢,但这些进程的启动似乎需要永远.5-10分钟.除非我刚刚做了,否则它会在10-30秒内开始.
我知道,在Commodore上加载这些磁带需要花费更长的时间,但多年来我已经变得不耐烦了.
有任何想法吗?
我在递归模式下使用QReadWriteLock。
这段代码本身没有意义,但是我从这里出现的问题是:
lock->lockForWrite();
lock->lockForRead();
Run Code Online (Sandbox Code Playgroud)
lockForRead被阻止。请注意,这是在递归模式下。
我看到的方式是Write是一个“高级”锁,它允许我读写受保护的数据,而Read锁仅允许读取。
另外,我认为如果唯一的阅读器是同一位要求写锁定的读者,则不应阻止写锁定。
从qreadwritelock.cpp源代码中可以看到,没有尝试使其像我想要的那样工作。因此,这不是错误,而是我发现缺少的功能。
我的问题是,应该允许这种递归吗?这种实现会带来什么问题吗?它们将是什么?
在QTableView中选择单元格时,其中的图标将显示为蓝色突出显示,如何控制此突出显示的颜色或禁用它?
我尝试设置QPalette :: Highlight但它没有用.
编辑:
好的,所以我知道如何更改背景颜色和文本颜色和颜色突出显示,但不知道如何更改图标.如果我返回一个图标作为单元格的装饰,则在选择单元格时会给它一个浅蓝色突出显示.我该如何删除?
.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) 我想制作一个 AVPacket 的副本,以便以后可以在我喜欢的时候对其进行解码。
AVPacket 来自音频流。
av_dup_packet 似乎不起作用。
AVPacket 复制构造函数不起作用。
创建我自己的复制构造函数会导致内存损坏。
读完这篇文章: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++ ×10
qt ×3
qtableview ×2
c++17 ×1
cmake ×1
endianness ×1
ffserver ×1
libavcodec ×1
makefile ×1
memory ×1
mingw ×1
mutex ×1
performance ×1
pimpl-idiom ×1
qthread ×1
rtmp ×1
video ×1
windows ×1