- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们已经在 Silverlight 之上实现了一个音频-视频协作应用程序,并正在尝试对其进行调整。我们遇到的问题之一是每当数据包丢失时流延迟都会增加:我们必须等待检测到数据包丢失、请求数据包丢失,然后重新发送丢失的数据包。当然,这会影响我们音频流的一致性。 (如果可以的话,我们会切换到 UDP,但 Silverlight 不支持浏览器内的那个。我们还禁用了 Nagle 算法,所以一般来说,只要我们提交要传输的 byte[] 数组,它被传输,并且在一个数据包中。我知道 TCP 数据包大小!= 提交的数据量,但是禁用 Nagle 算法,它很接近。我们有一个自适应 jitter buffer ,所以我们可以 处理丢失的数据包,但是通过 TCP/IP 丢失的数据包会大大增加我们需要缓冲的音频量,从而增加延迟。)
所以我们正在尝试优化我们发送数据包的方式,看看是否有任何方法可以减少丢弃数据包的影响。我们目前有几个我们正在考虑实现的竞争解决方案:
(1) 我们可以尝试让我们的数据包更大。目前,我们通过同一 TCP 流发送混合的大(~1024 字节视频)数据包和小(~70 字节音频)数据包。但是我们可以将音频和视频数据多路复用在一起,即只要有空间,就将我们的一些视频数据附加到我们的音频数据包中。这会使单个数据包稍微大一些,但会减少数据包的总数。
(2) 我们可以将音频和视频分成两个独立的 TCP 流。这意味着如果视频流因为数据包丢失而停止,音频流不会停止,反之亦然。当然,这会稍微增加开销,并且不会减少发送的数据包总数。
(3) 我们可以将音频反向多路复用到多个单独的 TCP 流中,然后在远端重新组合它们。这将有效地允许我们“伪造”单个 UDP 样式的数据包传递。如果我们有 8 个音频流,其中一个因为丢失数据包而停止,其他流仍然能够按时传送数据,而我们所要做的就是处理 1/8 的音频数据包在停滞的流恢复之前不可用。当然,这并不理想,但与让整个流停止并且在重新传输丢失的数据包之前无法播放任何数据包相比,这可能会带来更好的体验。
对这些可能性有什么想法吗?还有其他建议吗?还是我们只需要编写所有三个代码,然后测试它们?
最佳答案
如果您重新启用 Nagle 算法,您将 (i) 让 TCP 根据路径 MTU 而不是您自己的决定发送最大大小的缓冲区; (ii) 完成您的建议 (1) 搭载音频和视频数据包; (iii) 减少包的总数。使用和不使用 Nagle 算法的饱和 TCP 连接的稳态性能是相同的,因此除了初始窗口填充期间,您不会丢失任何东西。
你还应该运行你能负担得起的最大的套接字发送缓冲区:至少 128k,或者如果可能的话是它的两倍或四倍;并且您还应该使用尽可能大的套接字 receive 缓冲区,尽管在连接套接字之前必须设置大于 64k 的套接字接收缓冲区,以便在 TCP 握手期间可以告知另一端有关窗口缩放的信息.
关于silverlight - 最小化丢失数据包对通过 TCP 发送的实时媒体流的影响的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4229833/
似乎最近我看到越来越多的人开始在他们的样式表中使用 media="all" 而不是 media="screen"。 我的问题是什么时候应该使用 media="all" 而不是 media="scree
我正在尝试使用 https://www.instagram.com/developer/endpoints/media/ ,但对于我使用的每个媒体 ID,我总是得到相同的结果: { "meta
哟,我正在为服务器制作一个 MOTD 供最终用户阅读。但是,对于使用较小显示器的用户来说,它看起来非常压缩,例如,当分辨率为 1280x1040 时,它会被拉低。我不熟悉 CSS 中的 @media
我在我的 CSS 文件中使用了 @media screen 而不是 (-webkit-min-device-pixel-ratio:0)。我的问题是关于指定的值,即在这种情况下为“0”。值的变化将如何
我正在播放 Activity 中的视频,我需要显示/隐藏顶部栏 View 以及媒体 Controller 。所以当媒体 Controller 在屏幕上时,我的顶部 View 应该是可见的,当媒体 Co
我在我的 WordPress 主题中创建了一个小部件来显示图像。到目前为止,小部件可以工作,我可以输入值并在前端显示这些值。 当我选择一个小部件并将其放入小部件区域时,媒体上传按钮不起作用。在 Wor
我正在使用MWFeedParser从此处读取Youtube原子供稿:here xml代码: 我如何获取媒体的网址:缩略图? 我试图更改MWFeedParser.m 由此: else if ([cu
当使用 Python 向 Instagram API 发出 GET 请求时,传递所需的变量,如下所示 photos = api.media_search(lat=latitude, lng=longi
我正在使用与媒体播放器关联的媒体 Controller 来播放声音。问题是媒体 Controller 一旦失去焦点就会隐藏起来。我有一个按钮,按下时会播放声音,媒体 Controller 会出现在屏幕
我有一个媒体播放器并与它关联了一个媒体 Controller 。控件工作正常。 我遇到了两个问题: 当媒体 Controller 获得焦点时,即用户触摸它然后触摸屏幕的另一部分时,媒体 Control
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我在对话框中显示一个 VideoView 并向其附加一个媒体控件。 但是当我尝试点击媒体控件(播放、搜索栏等)时,对话框会消失。 媒体控制按钮不会被点击,而是将点击注册为 Dialog 的 Outsi
我目前正在使用 HTML 编写可打印文档,它将显示从数据库中提取的数据。我的想法是我将使用 HTML/CSS 使文档看起来不错,但它将专门用于打印。 文档的布局使用表格来控制数据库中数据的显示方式。
我需要在网络应用程序中打印我的报告。 我有在我的代码中。但它不应用任何样式。另一方面,如果我使用 在文档中编写 print.css 代码一切正常。 怎么了? 最佳答案 也许你在主样式之前插入打印样式
CSS html{ overflow-y:scroll; } js function showW(){ var a=($(window).width()); $('#
我编写了一个 Chrome 扩展程序,其中一个功能是您可以在您所在的页面中调出一个帮助面板,其中包含其使用指南。这个帮助面板是通过JS插入到页面中的,它的CSS都是通过$('#selector_for
我需要为 WORM 媒体开发归档软件。 这种类型的媒体允许通常的访问操作:读取、写入,但文件一旦写入,就无法修改或删除。 因为这样的媒体可能很昂贵,我想知道如何在开发阶段为测试创建一个假的 WORM
下面的这个 Activity 工作正常,但 mediaController 仅在我单击屏幕时显示。第二个问题是媒体 Controller 只显示 3 秒。我应该怎么做才能消除这个问题? public
我正在使用 VideoView 播放本地 mp4,我也在使用 MediaController。媒体控制栏未显示在我的视频剪辑下方,而是显示在屏幕中间。我使用 setAnchorView 将其附加到我的
我的布局包含 videoView 还有java代码中的Medicontrolleri: final MediaController mediaCont
我是一名优秀的程序员,十分优秀!