意外的状态行:ICY 200 对于 URL openStream() 方法可以吗?

2024-01-07

根据 kitakt 4.4 的更改,播放 Shoutcast 流会出现一些问题(那些返回“ICY”而不是“HTTP/1.x”响应的问题)。

因此,kitkat 的解决方案是在我们打开流之前在 JVM 中重新注册一次“icy”协议前缀:

try {
        java.net.URL.setURLStreamHandlerFactory( new java.net.URLStreamHandlerFactory(){
            public java.net.URLStreamHandler createURLStreamHandler( String protocol ) {
                Log.d( LOG, "Asking for stream handler for protocol: '" + protocol + "'" );
                if ("icy".equals( protocol )) return new com.spoledge.aacdecoder.IcyURLStreamHandler();
                return null;
            }
        });
}
catch (Throwable t) {
        Log.w( LOG, "Cannot set the ICY URLStreamHandler - maybe already set ? - " + t );
}

我在打开音频流以使其注册时遇到问题。我调用 url.openstream(stream) 后出现异常:

java.net.ProtocolException:意外的状态行:ICY 200 OK

我该如何解决它?


这是注册音频的示例,到目前为止我所做的..

try {
    URL url = null;
    url = new URL(u);
    inputStream = url.openStream();

    startTime = System.currentTimeMillis();

    Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);

    String fileName = File.separator + "radio_" + "recording_" + channelMetadata.replaceAll("\\W", "") + System.currentTimeMillis();

    if(isSDPresent)
    {
        outputSource = Environment.getExternalStorageDirectory() + fileName;
    }
    else
    {
        outputSource = Environment.getDataDirectory() + fileName;
    }

    if(contentType.equals("audio/aacp"))
        fileOutputStream = new FileOutputStream(outputSource  + ".acc");
    else if(contentType.equals("audio/mpeg"))
        fileOutputStream = new FileOutputStream(outputSource + ".mp3");
    else
        fileOutputStream = new FileOutputStream(outputSource + ".nieznany_format");

    int bytesRead = 0;
    int bytes;
    while (((bytes = inputStream.read()) != -1) && isRecording) {

        fileOutputStream.write(bytes);
        bytesRead++;

        stopTime = System.currentTimeMillis();

        long seconds = (Math.abs(startTime-stopTime));
        int minutes = 1000 * 60 * 60;

        if(minutes<=seconds)
        {
            Log.d("xxx", "recording task exceed stopped");
            break;
        }
    }

    inputStream.close();
    fileOutputStream.close();

} catch (IOException e) {
    e.printStackTrace();
    isRecording = false;
}

isRecording = false;
return null;

Android 4.4进行了各种更改,似乎非标准ShoutCast ICYAndroid 不支持标头。

看来善良的人们OkHttp https://github.com/square/okhttp修复了问题(issue 1 https://github.com/square/okhttp/pull/459 and issue 2 https://github.com/square/okhttp/issues/386)已经是几天前了。
您可以做的就是直接在您的应用程序中使用 OkHttp lib,这样您将使用较新的 OkHttp 版本(已修复的版本),而不是 Android 附带的版本(您必须等待操作系统更新)。
这也将为您在可能遇到该问题的其他设备上运行的应用程序修复该问题。

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

意外的状态行:ICY 200 对于 URL openStream() 方法可以吗? 的相关文章

  • 如何为ScrollView放置固定图像背景?

    我应该想要滚动视图滚动 而不是背景中的图像 将图像添加到滚动视图框架之前的视图层次结构的较高位置
  • 如何对这个字符串进行子串化

    我想得到这个字符串的 4 个部分 String string 10 trillion 896 billion 45 million 56873 我需要的4个部分是 10万亿 8960亿 4500万 和 56873 我所做的是删除所有空格 然
  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 找不到 com.google.firebase:firebase-core:9.0.0 [重复]

    这个问题在这里已经有答案了 在遵循有些不一致的指示之后here https firebase google com docs admob android quick start name your project and here http
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • maven插件安装:安装文件错误

    我使用 install install file 将 jar 安装到我的本地存储库 我的 pom xml 编写如下
  • 将无序列表制作为下拉菜单

    如果我在 WordPress 上显示此代码 将其转换为跳转菜单的最简单方法是什么 ul class toc odd level 1 li a href 1 It s finally here a li li a href 2 Improve
  • Python 中的线程需要更长的时间而不是使其更快?

    我编写了 3 个不同的代码来比较有线程和没有线程 基本上测量通过使用线程节省了多少时间 结果没有任何意义 这是我的代码 import time def Function global x x 0 while x lt 300000000 x
  • 在多宿主 Windows 10 计算机上接收 UDP 多播消息

    我有一个C NET侦听 UDP 多播消息的客户端 我需要在单个网络接口上接收消息 有时我看不到收到的消息 当我禁用其他接口时 它可以工作 我尝试使用本网站上类似问题的代码将套接字选项设置为特定接口 但是 我不确定这是否只影响发送多播消息而不
  • 在 PHP 中学习 mvc 的最佳方法是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 mvc 完全陌生 如何学习 走这条路 了解 MVC Google 一下 参见维基百科文章 选择一个框架 我建议 CodeIgni
  • 提高 Fortran 代码性能的提示和技巧 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在新的 iTunes connect 中创建应用内购买测试用户?

    我在 itune connect 中创建了一个测试用户 用户创建成功 并且还可以登录手机苹果商店 但是 当我要在同一用户的应用程序购买中进行测试时 我无法进行测试 总是显示错误 无法找到您输入的 Apple ID 或您的密码不正确 请重试
  • 适用于 Chrome,但不适用于 Firefox - jquery

    carat weight right li css left function index value if value 100 this children span css margin left 58px text align righ
  • 继续出现此编译错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 当我编译时 我不断收到此错误 mario c 4 1 error expected identifier or 我尝试过改变一些东
  • .htaccess - 将域/lang/重定向到每种语言的子域

    我已经为此苦苦挣扎了好几个星期 但无法找到解决方案 我必须在多语言网站的 htaccess 中进行重定向 其所有页面都遵循相同的结构 但每种语言都有一个子域 以下方式对 http 和 https 有效 domain es es allpag
  • gcc -D_FORTIFY_SOURCE=1 和 -D_FORTIFY_SOURCE=2 之间的区别

    有人可以指出两者之间的区别吗gcc D FORTIFY SOURCE 1 and D FORTIFY SOURCE 2 我猜 2更安全吗 我无法找到逐点列出差异的列表 我也读过 D FORTIFY SOURCE 2应该与使用 O2 否则并非
  • 如何从 Scala 方法创建 UDF(计算 md5)?

    我想从两个已经工作的函数构建一个 UDF 我正在尝试计算 md5 哈希作为现有 Spark Dataframe 的新列 def md5 s String String toHex MessageDigest getInstance MD5
  • JavaScript 字符串按正则表达式结果分割子字符串包含空切片

    我有以下字符串分割 JavaScript 代码 var formula field1 field2 field5 field2 field3 console log formula split 而结果却出乎意料 field1 field2
  • QFileSystemModel rowCount 未按预期工作

    我正在尝试模型 视图编程中的一个示例 http doc qt io qt 5 model view programming html http doc qt io qt 5 model view programming html 为了演示如
  • 如何确定docker容器端口号?

    ASP NET 应用程序部署到 Docker 容器 即 可以通过以下方式访问 http 10 98 1 191 1673 webapp start http 10 98 1 191 1673 webapp start 从后端来看 我需要确定
  • 如何使用多个输入的任何循环指定输入目录?

    public class MultiXslt public static void main String args throws TransformerException ParserConfigurationException SAXE
  • 手机上的 Silverlight 网站

    我正在开发一个 Silverlight 网站 功能要求之一是旋转图像在所有浏览器上显示 该测试站点在所有桌面计算机浏览器中看起来都很棒 现在的问题是手机上的系统无法加载 我无法理解 iPhone 黑莓等设备上没有插件 但我的问题是在 Mic
  • PyScripter Rpyc

    也许有人可以给我一些如何将 Rpyc 安装到 PyScripter 的指南 我使用 PyScripter 1 9 9 7 和 Python 2 6 我尝试用谷歌搜索并找到一些说明 但仍然没有成功 Thanks 抓取文件rpyc 2 60 p
  • 如何获取树视图中的所有展开节点?

    我有一个包含 TreeView 的程序 除了根节点和根节点下的两个节点之外 我的所有节点都是从数据库加载的 当用户将数据添加到数据库时 它必须自动添加到 TreeView 我可以通过清除所有节点 添加默认节点并将所有数据 包括新节点 添加到
  • 意外的状态行:ICY 200 对于 URL openStream() 方法可以吗?

    根据 kitakt 4 4 的更改 播放 Shoutcast 流会出现一些问题 那些返回 ICY 而不是 HTTP 1 x 响应的问题 因此 kitkat 的解决方案是在我们打开流之前在 JVM 中重新注册一次 icy 协议前缀 try j