视频流上的 TCP 与 UDP

2024-05-05

我刚从网络编程考试回来,他们问我们的问题之一是“如果您要传输视频,您会使用 TCP 还是 UDP?请解释一下存储视频和实时视频流”。对于这个问题,他们只是希望得到一个简短的答案:TCP 用于存储视频,UDP 用于实时视频,但我在回家的路上想到了这一点,使用 UDP 传输实时视频是否一定更好?我的意思是,如果您有足够的带宽,并且您正在直播一场足球比赛或音乐会,您真的需要使用 UDP 吗?

假设当您使用 TCP 流式传输这场音乐会或其他任何内容时,您开始丢失数据包(您和发送者之间的某个网络中发生了一些不好的事情),并且整整一分钟您都没有收到任何数据包。视频流将暂停,一分钟过去后,数据包开始再次通过(IP 为您找到了一条新路由)。然后会发生的情况是 TCP 会在您丢失的那一刻重新传输并继续向您发送实时流。假设带宽高于流的比特率,并且 ping 不太高,因此在很短的时间内,您丢失的一分钟将充当流的缓冲区,这样,如果再次发生丢包,您不会注意到。

现在,我可以想到一些设备,这不是一个好主意,例如视频会议,您可以在其中need始终处于直播的末尾,因为视频聊天期间的延迟实在是太可怕了,但在足球比赛或音乐会期间,如果您落后直播一分钟又有什么关系呢?另外,您可以保证获得所有数据,并且最好保存下来以便以后在没有任何错误的情况下查看。

这让我想到了我的问题。使用 TCP 进行直播有什么我不知道的缺点吗?或者,如果您有足够的带宽,您应该选择 TCP,因为它对网络“更好”(流量控制)?


使用 TCP 进行实时视频的缺点:

  1. 正如您所提到的,TCP 会为每个客户端缓冲未确认的段。在某些情况下,这是不希望的,例如非常流行的实时事件的 TCP 流:在这种情况下,并发客户端列表(和缓冲要求)很大。预先录制的视频广播通常不会有太大问题,因为观众往往会错开重播活动。

  2. TCP 的传送保证是一种阻塞功能,对交互式对话没有帮助。假设您的网络连接中断 15 秒。当我们错过谈话的一部分时,我们自然会要求对方重复(或者如果对方看起来你漏掉了什么,对方会主动重复)。 UDP 并不关心您是否在最后 15 秒内错过了部分对话;它继续工作,就像什么都没发生一样。另一方面,应用程序可以设计为 TCP 重播最后 15 秒(另一端的人可能不希望或不知道这一点)。 TCP 的这种重播会加剧问题,并使与对话中的其他方保持同步变得更加困难。比较 TCP 和 UDP 在丢包时的行为,可以说 UDP 更容易与交互式会话的状态保持同步。

  3. IP组播显着降低大量观众的视频带宽需求;多播需要 UDP(并且与 TCP 不兼容)。注意 - 多播通常仅限于专用网络。请注意,互联网上的多播并不常见。我还要指出,操作多播网络比操作典型的单播网络更复杂。

仅供参考,在描述网络时请不要使用“包”一词。网络发送“数据包”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视频流上的 TCP 与 UDP 的相关文章

  • 检测视频何时缓冲,如果缓冲则显示 gif

    我想知道是否有办法在视频缓冲时显示 gif 我正在使用 HTML5 视频标签 其中有一种方法可以检测视频何时缓冲 如果没有 是否有替代方法 我看过 如何检测视频何时缓冲 https stackoverflow com questions 1
  • IP 标志的不分段位在哪里使用?

    我很想知道 IP 标志的 不分段 DF 位在哪里使用 因为碎片对于更高层来说是不可见的 并且他们也不关心 我也在寻找一个例子 预先非常感谢 碎片并不总是对所有上层都可见 一些早期 甚至可能是当前 微控制器 TCP IP 堆栈没有实现碎片处理
  • 简单的跨平台 TCP IP API?

    我不打算使用像 QT 或 wxWidgets 的 API 这样的大东西 我只想要可以在 Android iOS Windows Mac Linux 上运行的简单套接字 我正在制作一个事件驱动的纸牌游戏 所以 TCP 是最好的 本质上 我只想
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 无法分配请求的地址 - 可能的原因?

    我有一个由主服务器和分布式从服务器组成的程序 从属服务器向服务器发送状态更新 如果服务器在固定时间内没有收到特定从属服务器的消息 则会将该从属服务器标记为关闭 这种情况一直在发生 通过检查日志 我发现从站只能向服务器发送一个状态更新 然后永
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 如何获取优酷access_token

    我在哪里可以找到access token refresh token在我的优酷账号里 我找到了如何使用外部脚本通过 API 将视频上传到 youku com 但我需要access token refresh token使用它 您需要对优酷应
  • 如何以编程方式找出哪台计算机是 Windows 中的域控制器?

    我正在寻找一种方法来确定客户端计算机连接到的给定域的域控制器的名称 IP 地址 在我们公司 我们有很多用于测试的小型网络 其中大多数都有自己的小域 作为示例 其中一个域被命名为 TESTLAB 我有一个 Windows XP 工作站 它是
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • Android-全屏视频视图

    我正在尝试使此 VideoView 以全屏模式显示 public class ViewVideo extends Activity private String filename private static final int INSER
  • 需要使用 iFrame API 隐藏 YouTube 品牌

    我正在使用 YouTube iFrame API 在我的自定义播放器 javascript 播放器 中加载视频 我需要隐藏 Youtube 品牌 但是在 iOS 设备上 它显示带有以下参数的徽标 playerVars fs 1 autopl
  • 如何从 Gforth 网站读取原始代码?

    我想要一个像这样的词 read site add n buff max n flag 其中 add n 是站点名称缓冲区 buff max 是应读取 ASCII 文本的缓冲区 n 是读取的字节数 flag如果操作成功则为 true 这在 L
  • 电子应用程序可以播放本地支持的任何视频吗?

    我知道浏览器通常会限制玩家mp4 and webm类型的媒体 但我想知道基于电子的应用程序是否可以运行 MKV 和 AVI 等格式的本地视频 我找不到明确的来源来告诉我什么是可用的 什么是不可用的 Electron 仍然仅限于网络技术 这意
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • FFmpeg - 来自 NodeJS 的 RTMP 流,流比实时更快

    我的目标是在 Node 中渲染画布 并将该画布流式传输到 RTMP 服务器 最终是 Twitch 但现在我正在在本地 RTMP 服务器上测试 流式传输到 RTMP 的标准方式似乎是ffmpeg 所以我使用它 从 NodeJS 中作为子进程生
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 来自相机的 MediaCodec 视频流方向和颜色错误

    我正在尝试流式传输视频捕获直接从相机适用于 Android 设备 到目前为止 我已经能够从 Android 相机捕获每一帧预览帧 byte data Camera camera 函数 对数据进行编码 然后成功解码数据并显示到表面 我用的是安

随机推荐