Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建基于OPUS编解码器的多播服务器(android/linux)_Android_Linux_Audio Streaming_Multicast_Codec - Fatal编程技术网

创建基于OPUS编解码器的多播服务器(android/linux)

创建基于OPUS编解码器的多播服务器(android/linux),android,linux,audio-streaming,multicast,codec,Android,Linux,Audio Streaming,Multicast,Codec,我正在尝试为我正在进行的音频项目创建一个基于OPUS的多播服务器,它将在O-Droid X上运行(http://www.hardkernel.com/renewal_2011/products/prdt_info.php?g_code=g133999328931)对于这个项目。目前,我还不确定从何处开始使用OPUS编解码器在linux或android中创建和制作多播服务器。这是我第一个多播服务器的音频支持,我已经做了从头开始。如果有任何建议,我们将不胜感激 另外,通过网页访问和播放也将是一种理想

我正在尝试为我正在进行的音频项目创建一个基于OPUS的多播服务器,它将在O-Droid X上运行(http://www.hardkernel.com/renewal_2011/products/prdt_info.php?g_code=g133999328931)对于这个项目。目前,我还不确定从何处开始使用OPUS编解码器在linux或android中创建和制作多播服务器。这是我第一个多播服务器的音频支持,我已经做了从头开始。如果有任何建议,我们将不胜感激


另外,通过网页访问和播放也将是一种理想的情况,这样客户端就不需要特定的应用程序了。

作为一般性说明,在我的评论得到答复之前:您将失望地获悉多播几乎毫无用处。除了在现实世界中可能不会遇到的一些不寻常的配置之外,多播在Internet上不起作用,因为大多数路由器都没有配置为通过它。它实际上只能在本地网络上使用


至于让它通过网页访问,你几乎是运气不佳。本机浏览器不支持多播,OPUS也不普遍支持,大多数扩展浏览器功能的标准方法(如Javascript和Flash)也帮不了你多少忙。您可能能够在Java小程序中实现它,但是使用Java安装的用户代理的数量正在迅速减少(特别是最近的Java漏洞攻击),最终导致的小程序可能需要更高的权限才能使用多播。

显然,Icecast做了很多您需要的事情。它是开源的(GPL),支持使用Ogg容器格式的Opus流,您可以了解一些通用的软件架构思想。我的SoundWire Android应用程序(带有Win/Linux服务器)的Opus流媒体延迟较低,但网络协议是定制的。。。我不知道有哪种开放协议可以实现低延迟(根据我的定义,1秒延迟不是低延迟)

我的方法是构建一个传统的网络服务器,为每个客户端设置一个普通的单播UDP套接字。避免TCP如果您想要低延迟,那么您必须以某种方式处理UDP的数据报性质。使用Opus,每个客户端的数据流量不会过多。我仅将多播用于发现(自动定位服务器)


我建议您从一些开源服务器代码开始,并根据您的需要对其进行调整,引入易于集成的Opus,选择合适的容器格式,如Ogg(搜索Ogg Opus)。如果您想实现浏览器兼容性,那么您将或多或少地实现web服务器的一部分(HTTP等),并且必须放弃低延迟目标。

您计划向什么广播音频?通过什么网络?从15.0 beta()开始,Firefox支持移动设备、笔记本电脑和本地无线/有线网络Opus????可能多播的原因是,这将只在本地网络上使用,并可能发送给许多用户,我们希望尽可能减少任何和所有延迟。。。。这适用于延迟控制非常重要的音频应用程序。。。。我们从一个浏览器实现开始,然后在必要时转移到一个应用程序。嗯,我不知道Opus在Mozilla中——不过,仍然没有办法获得多播。尽管如此,我强烈建议不要尝试浏览器实现。根据您的需要,最好直接使用一个独立的应用程序。有什么可以帮助您在服务器端进行设置的吗?这是我的第一个自定义音频服务器设置…对于设置/创建低延迟网络协议,您有什么建议吗?这对我来说是一个新领域…只是一些一般的想法。。。尽可能小的保持缓冲区大小,避免臃肿的库,不要使用TCP,编写代码是确定的(一致的行为),如果可能的话,调整你的线程优先级,小心选择你的平台(例如,如果选择C++和java之间,选择C++)。简言之,想想精益和中庸。最后要意识到,有两个巨大的因素意味着你永远无法完全达到你的目标:IP网络不是为可预测性或低延迟而设计的,你的代码运行的非实时操作系统也是如此。