我试图找到一种解决方案,将不同的输入 (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 是否可以为我完成这项工作?
在RFC 7540第5.1.1节中。(https://tools.ietf.org/html/rfc7540#section-5.1.1),它指定如下:
新建立的流的标识符必须在数值上大于发起端点已打开或保留的所有流。
我在Google上搜索了很多内容,但仍然没有人解释为什么流ID必须按升序排列。我对协议制定此规则没有任何好处。从我的角度来看,如果服务器仅将“流ID”视为ID并使用它来区分HTTP2请求,则乱序流ID也应能很好地工作。
那么,有谁能帮忙解释此规范的确切原因?
非常感谢!
据我所知,TCP将消息分解为多个段。那么,为什么再次在HTTP2上进行多路复用?复用两次有什么好处?
我目前正在实施受 KCP、Dragonite 和 QUIC 启发的可靠 UDP 传输,只是出于自我教育的目的。我想应用几种优化,其中之一是多路复用。
我的想法是:我将数据分成小块(块大小与 MTU 相关),并使用协程并行(在客户端和服务器上)通过多个数据报套接字异步发送和接收它们。
这个解决方案会起作用吗?我应该期待性能改进吗?
出于某种原因,我想读取我在 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) 我正在学习pubnub并且我阅读了他们的文档,但我找不到如何管理多房间聊天框.
默认情况下,任何人都可以收听频道.订阅它并在其上发布很容易.
我想要的是拥有一个主要的公共房间(到目前为止一直很好),但任何人都应该能够私下与其他人交谈而不会被其他用户阅读.
这些动态房间将被标记,用户应该能够从一个房间到另一个房间.
另一个要求是私下与某人交谈不会让你离开你订阅的其他房间(你仍然可以通知你在聊天时在另一个房间发布了一条新消息)
实现这一目标的最佳做法是什么?
我需要知道实现这一目标的最佳方法,因为文档仅描述了单个房间的基本情景,而且在互联网上没有任何相关内容.
谢谢.
PS:我知道PubNub一次不建议超过2个频道(即使我很难找到解释).
PPS:我正在使用punbub和socket.io
我正在编写一个应用程序,它在两个实例之间并行运行了多个(数百个)并发网络操作.由于连接的平均寿命非常短(最多几秒),我认为每次使用许多TCP连接并进行握手(特别是对于TLS握手)的开销太大.
我开始研究实现多路复用的几个协议和库(主要是Apache Qupid,RabbitMQ等AMQP实现,如本问题的答案中所述).然而,所有这些似乎都在TCP上运行,这引入了一些开销并且没有多大意义(这篇文章很好地解释了问题并且得出结论TCP多路复用是愚蠢的).他们所有人都感觉很胖,我更喜欢小而轻的东西(ZeroMQ遗憾的是,没有实现多路复用.这让我想到是否使用UDP是一种选择.当然,必须正确地实现恢复和ACK之类的东西,但是通过连接知道有关多个流的知识应该比简单地使用TCP更有效.
你认为我上面的推理是正确的,还是我错过了一些重要的东西?有没有好的C/C++库通过UDP实现多路复用?
所以我在 Arch 2016.06.01 安装了 tmux。我是通过 SSH 连接的。尝试运行该程序时,我收到以下响应:
tmux: 无效的 LC_ALL、LC、TYPE 或 LANG
其他程序在此 VM 上正常打开。谢谢!
这个问题可能有点偏离主题,但我不知道还能问哪里。我正在阅读此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 套接字编程,所以我可能不知道事情是如何完成的。
multiplexing ×10
http2 ×3
c++ ×2
networking ×2
archlinux ×1
asynchronous ×1
c ×1
ffmpeg ×1
http ×1
http-headers ×1
httprequest ×1
iso8583 ×1
jpos ×1
libevent ×1
private ×1
pubnub ×1
rfc ×1
sockets ×1
ssh ×1
tcp ×1
tmux ×1
udp ×1
video ×1