标签: multiplexing

使用 ffmpeg 将多个单个视频 MPEG-TS 复用为 MPTS

我试图找到一种解决方案,将不同的输入 (ts) 复用到一个 MPTS 中,以便可以用作 DVB-T 调制器的输入。基本上,我想要的是选择卫星接收器提供的某些 TS,将它们重新打包成一个 MPTS 并发送到调制器。目前,我已成功使用以下命令通过一个流来完成此操作:

  ~/DATVRelease/ffmpeg \
 -re -i URL_SINGLE_INPUT_TS_STREAM  -vcodec copy -acodec copy \
 -f mpegts -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 \
 -mpegts_service_id 1 -mpegts_pmt_start_pid 1000 -mpegts_start_pid 1001 \
 -metadata service_provider="YOUR CALL" \
 -metadata service_name="N1 (ALEKSANDAR)" \
 ~/dvb/videots
Run Code Online (Sandbox Code Playgroud)

其中 videots 是由 mkfifo 命令生成的 fifo 管道。以下代码在接收方产生结果:

https://i.stack.imgur.com/BZugM.jpg

ffmpeg 中有一个 -map 函数,我可以在其中添加多个音频通道/或视频通道,但它们不会在接收器端被检测为不同的服务电视频道,因为根据我的理解,必须创建足够的 PMT 表(iso13818)

我能找到的唯一开源是这个http://www.scara.com/~schirmer/o/mplex13818/,但我仍然想知道 ffmpeg 是否可以为我完成这项工作?

video ffmpeg transport-stream multiplexing

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

为什么http / 2流ID必须升序?

在RFC 7540第5.1.1节中。(https://tools.ietf.org/html/rfc7540#section-5.1.1),它指定如下:

新建立的流的标识符必须在数值上大于发起端点已打开或保留的所有流。

我在Google上搜索了很多内容,但仍然没有人解释为什么流ID必须按升序排列。我对协议制定此规则没有任何好处。从我的角度来看,如果服务器仅将“流ID”视为ID并使用它来区分HTTP2请求,则乱序流ID也应能很好地工作。

那么,有谁能帮忙解释此规范的确切原因?

非常感谢!

rfc multiplexing http2

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

为什么HTTP / 2完全通过tcp进行复用呢?

据我所知,TCP将消息分解为多个段。那么,为什么再次在HTTP2上进行多路复用?复用两次有什么好处?

multiplexing http2

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

通过多个 UDP 端口传递数据是否会提高性能

我目前正在实施受 KCP、Dragonite 和 QUIC 启发的可靠 UDP 传输,只是出于自我教育的目的。我想应用几种优化,其中之一是多路复用。

我的想法是:我将数据分成小块(块大小与 MTU 相关),并使用协程并行(在客户端和服务器上)通过多个数据报套接字异步发送和接收它们。

这个解决方案会起作用吗?我应该期待性能改进吗?

networking asynchronous udp multiplexing

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

如何以编程方式读取 jpos QMUX 关键字段?

出于某种原因,我想读取我在 QMUX 配置文件(20_client_mux.xml)中设置的密钥。<key>37</key>我无法从 jpos 本身找到任何方法,所以我使用下面的代码来完成任务。我想在不使用 Reflection 的情况下做到这一点,如果不需要创建扩展 或 的子类,我很QMUX高兴XMLConfigurable

    import org.springframework.util.ReflectionUtils;

    private static String getUniqueFieldId() {
            final String[][] key = {new String[1]};
            ReflectionUtils.doWithFields(QMUX.class, field -> {
                if (field.getName().equals("key")) {
                    field.setAccessible(true);
                    key[0] = (String[]) field.get(mux);
                }
            });
            return key[0][0];
        }

Run Code Online (Sandbox Code Playgroud)

jpos multiplexing iso8583

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

PubNub最佳实践:如何管理私人房间?

我正在学习pubnub并且我阅读了他们的文档,但我找不到如何管理多房间聊天框.

默认情况下,任何人都可以收听频道.订阅它并在其上发布很容易.

我想要的是拥有一个主要的公共房间(到目前为止一直很好),但任何人都应该能够私下与其他人交谈而不会被其他用户阅读.

这些动态房间将被标记,用户应该能够从一个房间到另一个房间.

另一个要求是私下与某人交谈不会让你离开你订阅的其他房间(你仍然可以通知你在聊天时在另一个房间发布了一条新消息)

实现这一目标的最佳做法是什么?

  • 我会使用不同的频道(动态创建)吗?
  • 我会使用一个频道并根据他们的状态,伪房间ID或主角过滤消息吗?
  • 我会使用多路复用(仅限一个插槽)吗?

我需要知道实现这一目标的最佳方法,因为文档仅描述了单个房间的基本情景,而且在互联网上没有任何相关内容.

谢谢.

PS:我知道PubNub一次不建议超过2个频道(即使我很难找到解释).

PPS:我正在使用punbub和socket.io

private multiplexing socketchannel pubnub

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

使用多路复用搜索C/C++网络库

我正在编写一个应用程序,它在两个实例之间并行运行了多个(数百个)并发网络操作.由于连接的平均寿命非常短(最多几秒),我认为每次使用许多TCP连接并进行握手(特别是对于TLS握手)的开销太大.

我开始研究实现多路复用的几个协议和库(主要是Apache Qupid,RabbitMQAMQP实现,如本问题的答案中所述).然而,所有这些似乎都在TCP上运行,这引入了一些开销并且没有多大意义(这篇文章很好地解释了问题并且得出结论TCP多路复用是愚蠢的).他们所有人都感觉很胖,我更喜欢小而轻的东西(ZeroMQ遗憾的是,没有实现多路复用.这让我想到是否使用UDP是一种选择.当然,必须正确地实现恢复和ACK之类的东西,但是通过连接知道有关多个流的知识应该比简单地使用TCP更有效.

你认为我上面的推理是正确的,还是我错过了一些重要的东西?有没有好的C/C++库通过UDP实现多路复用?

c c++ networking multiplexing

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

与HTTP/1.1相比,HTTP/2如何提供更快的浏览速度?

我正在阅读一篇关于启动HTTP/2 的文章.据说HTTP/2基于SPDY(快速)协议,与HTTP/1.1相比,它可以通过使用"头字段压缩"和"多路复用"提供更快的浏览速度.这些术语如何正常工作?

我是否应该相信在HTTP/1.1请求中以"一个接一个"的方式处理?

http httprequest http-headers multiplexing http2

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

无法在 Arch Linux VM 中运行 tmux

所以我在 Arch 2016.06.01 安装了 tmux。我是通过 SSH 连接的。尝试运行该程序时,我收到以下响应:

tmux: 无效的 LC_ALL、LC、TYPE 或 LANG

其他程序在此 VM 上正常打开。谢谢!

ssh virtual-machine multiplexing archlinux tmux

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

为多个请求重用同一个套接字连接

这个问题可能有点偏离主题,但我不知道还能问哪里。我正在阅读此https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md并看到该规范包括能够使用相同的连接发送无序消息。

我之前进行TCP套接字编程的唯一方法是在套接字上同步发送请求,例如,我将打开一个套接字127.0.0.1,通过该套接字向该服务器发送请求并等待响应。当我收到所发送请求的响应时,我会在响应请求后通过调用close()客户端和close()服务器来关闭该连接。


作为背景,我正在开发一个 C++ 项目,libevent该项目要做的事情与 RPC 系统非常相似,所以我想知道我应该在底层传输系统中使用什么请求响应套接字周期。

在 C++ thrift 中,有一个名为open()(大概)的客户端方法,它打开一个连接并保持它打开状态,直到您调用close(). 这在被抽象出来的系统中如何工作?例如,在我上面包含的 messagepack-RPC 链接中。最好的做法是什么?如果没有连接,则打开一个连接,发送请求,并在所有先前的请求得到处理后关闭该连接(在服务器上,close()当所有挂起的请求都得到响应时调用)?或者我们是否必须以某种方式尝试使该连接在超出请求生命周期的一段时间内保持活动状态?服务器和客户端如何知道该时间段是多少?recv()例如,我们是否应该在套接字上注册一个读取事件处理程序并在返回时关闭连接0

如果这是一个不同系统以不同方式解决的问题,那么有人可以指导我找到一个资源,我可以使用该资源来读取保持连接活动的可能模式(最好是在事件驱动系统中)?例如,我读到 HTTP 服务器始终保持连接打开,这是为什么?保持每个连接打开是否意味着服务器本质上会泄漏内存?

抱歉,这个看似基本的问题,我以前只做过非常简单的 TCP 套接字编程,所以我可能不知道事情是如何完成的。

c++ sockets tcp libevent multiplexing

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