小编Dan*_*iel的帖子

在浏览器中显示 RTSP H264 流的现代方式 (HTML5)

是的,这个话题也在 SO 上不时出现。

我已经阅读了很多关于这个主题的内容,也尝试了一些解决方案,但我有一些限制:

  1. 浏览器独立性(大多数浏览器应该可以工作)
  2. 平台无关(应支持主要平台)
  3. 开箱即用(无插件!)
  4. 低延迟(最好低于 1 秒)
  5. 带宽有限(MJPEG 不是一种选择)
  6. 没有转码!

所以继续前进:H264 流似乎非常适合约束 1 和 2。

此外,我的源将实时 H264(准确地说:MPEG-4 AVC,第 10 部分)生成到 RTSP 容器中。

但是浏览器仍然不支持 RTSP。

我检查过的:

上面的所有帖子都与这个问题有关,那里有很多有价值的信息。

此外,我还阅读了2014 年 (!) 的一篇非常好的文章,该文章详细且具有前瞻性。

所以,截至今天,最好的解决方案是:

  1. 解析 RTSP …

java rtsp h.264 websocket

12
推荐指数
0
解决办法
6575
查看次数

MQTT C++ 客户端

我想用 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 开始写)?

c++ mqtt libmosquitto pahocpp

7
推荐指数
3
解决办法
9684
查看次数

Javascript ArrayBuffer修改性能

我想在 JavaScript 中修改 ArrayBuffer 的内容。

从帮助部分:

您不能直接操作 ArrayBuffer 的内容;相反,您创建一个类型化数组对象或一个以特定格式表示缓冲区的 DataView 对象,并使用它来读取和写入缓冲区的内容。

我不需要向控制台打印任何内容,我只需要一个修改了一些字节的 ArrayBuffer 。

所以,如果我有一个大的 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)

javascript typed-arrays arraybuffer

5
推荐指数
0
解决办法
2099
查看次数

仅连接大写字母?

在 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)

excel excel-formula

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

C# LibVLCSharp播放器直接播放媒体

有一个 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 实现这一目标?

c# vlc libvlc libvlcsharp

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

从 uint8_t* 到 uint32_t 的转换无效 - 从 32 位架构迁移到 64 位架构时?

我有一个小函数,可以将 32 位架构上的虚拟内存地址转换为物理内存地址:

\n
uint32_t VIRTBASE;\n\nuint32_t getPhysForVirt(void* virt) {\n  uint32_t offset = (uint8_t*)virt - VIRTBASE;\n  return PHYSBASE + offset;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在过去 10 多年里,它的编译和运行没有出现任何问题。

\n

我更改了编译器来为较新的架构构建存储库(现在首次支持 64 位)。

\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

现在,我理解了该消息,但我不确定使编译没有错误所需的步骤。

\n

我只是确定我不想启用 -fpermissive

\n

c memory type-conversion

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

SQLite 慢速选择查询 - 如何使其更快

在 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:嵌入式系统参数在这里并不重要。这应该通过优化查询或底层模式来解决。

sql sqlite performance

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

如何将非静态成员函数用于模板参数?

我有这个最小的示例代码:

#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++ templates

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