是的,这个话题也在 SO 上不时出现。
我已经阅读了很多关于这个主题的内容,也尝试了一些解决方案,但我有一些限制:
所以继续前进:H264 流似乎非常适合约束 1 和 2。
此外,我的源将实时 H264(准确地说:MPEG-4 AVC,第 10 部分)生成到 RTSP 容器中。
但是浏览器仍然不支持 RTSP。
我检查过的:
上面的所有帖子都与这个问题有关,那里有很多有价值的信息。
此外,我还阅读了2014 年 (!) 的一篇非常好的文章,该文章详细且具有前瞻性。
所以,截至今天,最好的解决方案是:
我想用 C++ 实现一个 MQTT 客户端功能(它需要是线程安全的,并且能够订阅主题和发布,但不需要代理功能)。
我正在考虑Eclipse 的Paho MQTT。 这是他们的下载页面。
我发现他们没有 MQTT5.0 支持。
然而,在他们的github 上:有一个 C++ 包装器,它在 1.1 版中声明了 MQTTv5.0 支持。
然后我发现了这个问题:Mosquitto vs eclipse paho client library,结论是:
将 libmosquitto 与libmosquittopp包装器一起使用
我检查了 libmosquittopp.h:所有函数都被标记为已弃用,所以我认为到目前为止它不是正确的方法。
为什么不推荐使用 libmosquittopp?因为
包装器是由外部请求产生的,在创建它时,没有其他适用于 MQTT 的 C++ 解决方案。这在过去几年中发生了变化,与真正的 C++ 库或使用纯 C libmosquitto 相比,此包装器没有任何好处。
那么,Paho 现在是否被认为是在 C++ 中使用 MQTT 的正确方向?
或者我只使用 Mosquitto 的纯 C 库?
或者,还有什么(除了从 0 开始写)?
我想在 JavaScript 中修改 ArrayBuffer 的内容。
从帮助部分:
您不能直接操作 ArrayBuffer 的内容;相反,您创建一个类型化数组对象或一个以特定格式表示缓冲区的 DataView 对象,并使用它来读取和写入缓冲区的内容。
我不需要向控制台打印任何内容,我只需要一个修改了一些字节的 ArrayBuffer 。
const buffer = new ArrayBuffer(16*1024);
Run Code Online (Sandbox Code Playgroud)
const typedArray1 = new Uint8Array(buffer);
typedArray1[16000] = 65;
const typedArray2 = new Uint8Array(buffer,16000);
typedArray2[0] = 65;
const typedArray3 = new Uint8Array(buffer,16000,1);
typedArray2[0] = 65;
const dataView1 = new DataView(buffer);
dataView1.setUint8(16000, 65);
const dataView2 = new DataView(buffer, 16000);
dataView2.setUint8(0, 65);
const dataView3 = new DataView(buffer, 16000, 1);
dataView3.setUint8(0, 65);
Run Code Online (Sandbox Code Playgroud) 在 Excel (2021) 中,我有一个包含单词的单元格:
all Upper case LeTters supposed to be In result
Run Code Online (Sandbox Code Playgroud)
我需要结果:
ULTI
Run Code Online (Sandbox Code Playgroud)
如果没有 VBA(即纯 Excel 函数),我该如何做到这一点?
我搜索过,但“大写”和“连接”函数都导致连接并变为大写,而不是相反:连接 IF 大写。
虽然我找到了一个,但它看起来相当丑陋,我认为(希望)有更好的解决方案:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(SUBSTITUTE(SUBSTITUTE(txt,"a",""),"b",""),"c",""),"d",""),"e",""),
"f",""),"g",""),"h",""),"i",""),"j",""),"k",""),"l",""),"m",""),"n",""),"o",""),
"p",""),"q",""),"r",""),"s",""),"t",""),"u",""),"v",""),"w",""),"x",""),"y",""),
"z","")," ","")
Run Code Online (Sandbox Code Playgroud) 有一个 C# 应用程序通过 NuGet 包使用 LibVLC。
这些是包:
使用这些包,可以很容易地将一些媒体播放器放入您的 WinForms 应用程序中。
您所要做的就是初始化一个播放器并Media为其赋予一个新值:
LibVLCSharp.Shared.LibVLC libVLC = new LibVLC();
LibVLCSharp.WinForms.VideoView videoView;
videoView.MediaPlayer = new LibVLCSharp.Shared.MediaPlayer(libVLC)
videoView.MediaPlayer.Play(new Media(libVLC, "URL", FromType.FromLocation));
Run Code Online (Sandbox Code Playgroud)
现在我想向媒体播放器提供缓冲区中的自定义数据。它可以是字节数组,或任何类似的东西。(数据应被视为来自有效的 mp4 文件逐块)。
如何在 C# 中使用 libVLC 实现这一目标?
我有一个小函数,可以将 32 位架构上的虚拟内存地址转换为物理内存地址:
\nuint32_t VIRTBASE;\n\nuint32_t getPhysForVirt(void* virt) {\n uint32_t offset = (uint8_t*)virt - VIRTBASE;\n return PHYSBASE + offset;\n}\nRun Code Online (Sandbox Code Playgroud)\n在过去 10 多年里,它的编译和运行没有出现任何问题。
\n我更改了编译器来为较新的架构构建存储库(现在首次支持 64 位)。
\n编译失败提示
\n\n\n从 \xe2\x80\x98uint8_t*\xe2\x80\x99 {aka \xe2\x80\x98unsigned char*\xe2\x80\x99} 到 \xe2\x80\x98uint32_t\xe2\x80\x99 {aka \xe2 的无效转换\x80\x98unsigned int\xe2\x80\x99} [-fpermissive]
\n
现在,我理解了该消息,但我不确定使编译没有错误所需的步骤。
\n我只是确定我不想启用 -fpermissive。
\n在 SQLite 中,我有一个很大的数据库(~35Mb)。
它包含一个具有以下语法的表:
CREATE TABLE "log_temperature" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"date" datetime NOT NULL,
"temperature" varchar(20) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
现在当我想搜索一段时间内的数据时,在嵌入式系统上太慢了:
$ time sqlite3 sample.sqlite "select MIN(id) from log_temperature where
date BETWEEN '2019-08-13 00:00:00' AND '2019-08-13 23:59:59';"
331106
real 0m2.123s
user 0m0.847s
sys 0m0.279s
Run Code Online (Sandbox Code Playgroud)
注1:id 的范围是从 210610 到 331600。
注意2:如果我运行“SELECT id FROM log_tempORDER BY ASC LIMIT 1”,它会给出与“MIN”函数完全相同的计时。
我希望“0m2.123s 的实时时间”尽可能接近 0m0.0s。
我有哪些选择可以加快速度?(不删除数十万条数据?)
PS:嵌入式系统参数在这里并不重要。这应该通过优化查询或底层模式来解决。
我有这个最小的示例代码:
#include <functional>
#include <iostream>
#include <vector>
template<class ReadFileCallback>
void fileMgr_ReadWithCallback(std::string filename, ReadFileCallback callback) {
callback("OK");
}
void globalReadResult(std::string result) {
std::cout << "ReadResult in global function: result=" << result << std::endl;
}
class MyClass {
public:
MyClass() {};
~MyClass() {};
void Read() {
fileMgr_ReadWithCallback("file", globalReadResult);
//fileMgr_ReadWithCallback("file", this->ReadResult);
}
void ReadResult(std::string result) {
std::cout << "ReadResult in member function: result=" << result << std::endl;
}
};
int main()
{
MyClass c;
c.Read();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于回调函数,我想使用非静态类成员MyClass::ReadResult。在调用回调之前知道对象是否仍然有效(未破坏)也是很好的,因为否则我猜程序会失败。
我应该如何更改此代码才能将MyClass …
c++ ×2
arraybuffer ×1
c ×1
c# ×1
excel ×1
h.264 ×1
java ×1
javascript ×1
libmosquitto ×1
libvlc ×1
libvlcsharp ×1
memory ×1
mqtt ×1
pahocpp ×1
performance ×1
rtsp ×1
sql ×1
sqlite ×1
templates ×1
typed-arrays ×1
vlc ×1
websocket ×1