NanoHTTPD - 将 https 流转换为 http

2023-12-22

为了克服 Chromecast 对来自自认证 https 服务器(在我的例子中是 Subsonic 音乐服务器)进行流传输的限制,我正在利用已经作为我的 Android 应用程序的一部分运行的 NanoHTTPD 服务器实例。这个想法是从 Subsonic 服务器 (SSL) 进行流传输,并将该流连接到新流(非 SSL),以便 NanoHTTP.Response 返回 Chromecast。我有从 Subsonic 服务器(通过 MediaPlayer 播放)工作的 InputStream,但不知道如何为以下调用重新传输未加密的流:

new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "audio/mpeg", newStream);

简而言之,如何将 https 加密音频流即时转换为解密音频流?


好的,设法让所有这些工作正常。使用 https 的 Subsonic 服务器,可使用服务器的自签名证书从 Android 和 Chromecast 访问。如果 https 已打开,则 Android 和 Chromecast 都使用在 Android 客户端上运行的 nanohttpd 代理服务器分别传输到 Android MediaPlayer 和 html5 音频元素。在 Android 上运行的 nanohttpd 服务器的服务函数覆盖包含以下代码:-

int filesize = .... obtained from Subsonic server for the track to be played

// establish the https connection using the self-signed certificate
// placed in the Android assets folder (code not shown here)
HttpURLConnection con = _getConnection(subsonic_url,"subsonic.cer")

// Establish the InputStream from the Subsonic server and
// the Piped Streams for re-serving the unencrypted data 
// back to the requestor
final InputStream is = con.getInputStream();
PipedInputStream sink = new PipedInputStream();
final PipedOutputStream source = new PipedOutputStream(sink);

// On a separate thread, read from Subsonic and write to the pipe 
Thread t = new Thread(new Runnable() {
                public void run () {
                    try {
                        byte[] b = new byte[1024];
                        int len;
                        while ((len = is.read(b,0,1024)) != -1)
                            source.write(b, 0, len);
                        source.flush();
                    }
                    catch (IOException e) {
                    }
                }});

t.start();
sleep(200); // just to let the PipedOutputStream start up

// Return the PipedInputStream to the requestor.
// Important to have the filesize argument
return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, 
                              "audio/mpeg", sink, filesize);

我发现打开 mp3 转码功能的流式 flac 文件给了我 flac 文件大小,当然还有 mp3 流。事实证明,这对于 html5 音频元素来说很难处理,因此我转而将 &format=raw 添加到流的 Subsonic api 调用中。因此,无论用户通过 https 进行的配置如何,我都会流式传输原始格式,并且到目前为止在测试中一切似乎都运行良好。

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

NanoHTTPD - 将 https 流转换为 http 的相关文章

随机推荐

  • 仅在第一次调用变量时才执行工作的 Pythonic 方式

    我的 Python 类有一些变量需要在第一次调用时进行计算 后续调用应该只返回预先计算的值 我不想浪费时间做这项工作 除非用户确实需要它们 那么有没有一种干净的 Pythonic 方式来实现这个用例呢 我最初的想法是第一次使用 proper
  • Android中如何将图像转换为字节数组

    我面临一个现实问题 我需要将图像转换为字节数组格式 以便我可以将字节数组上传到网络服务器 我已经尝试了很多但它不起作用 我还得到了字节数组的负值 我不确定在数组中获取字节值我做错了什么 下面是我的代码 请帮助我我做错了什么 Bitmap b
  • 未找到 APOC 程序

    CALL apoc export csv query match m Movie where m name Matrix return m name re sults csv 错误 Neo ClientError Procedure Pro
  • Python-camelot(安装时错误:GhostscriptNotFound)

    我正在尝试使用camelot从pdf中提取表格数据 但出现以下错误 Code tables camelot read pdf file name Error GhostscriptNotFound 请确保 Ghostscript 已安装并且
  • Azure 中的 Serilog 与 API 应用程序

    我已将 Serilog 集成到使用 Asp Net Core 2 0 开发的 WebApi 项目中 这是配置代码Program cs Log Logger new LoggerConfiguration Enrich FromLogCont
  • 将字符串转换为 C# 中的控件名称[重复]

    这个问题在这里已经有答案了 可能的重复 按名称在 C winforms 中查找控件 https stackoverflow com questions 4483912 find a control in c sharp winforms b
  • 找到两个向量之间的最佳/缩放/移位

    我有两个向量表示函数 f x 另一个向量 f ax b 即 f x 的缩放和移位版本 我想找到最好的规模和转变因素 最佳 通过最小二乘误差 最大似然等 有任何想法吗 例如 f1 0 0 450541598502498 0 083821377
  • 输入后忽略回车键的C代码

    我遇到了标准输入流中的 Enter 键或字符弄乱以下输入调用的问题 假设我有一个输入调用 所以我输入了内容 但随后将 Enter 键作为下一个输入调用的输入 我认为在c 中有cin ignore 来做到这一点 我就是找不到C版本 输入法有g
  • 如何在VBA中保存工作表

    我正在构建一个表单 当您填写该表单时 它应该生成 2 个文件作为输出 为了做到这一点 我在后台有 2 张纸 我根据用户输入的按钮将其保存 作为 csv 来填充 这是保存工作表的代码 Worksheets worksheetname Save
  • 带彩色输出的工头运行防护装置

    我可以从我的工头 procfile 中运行守卫 但输出并不像我想要的那样丰富多彩 我在输出中看到的唯一颜色来自 Foreman 我想要一个管理 rspec 黄瓜和茉莉花的保护文件 并且在这些测试运行时有漂亮的颜色输出 看起来好像工头忽略了防
  • 为什么 Magento 每个会话使用 2 个 cookie?

    出于数据安全和隐私原因 我想知道为什么 Magento 对一个前端会话使用两个 cookie 我所知道的是其中一个正在被设置Mage Core Model Cookie set 另一个在Zend Session expireSessionC
  • HTML & XHTML id 属性问题

    id 属性值可以以数字开头吗 对于 HTML 没有 http www w3 org TR html401 types html type name http www w3 org TR html401 types html type nam
  • 安卓中的人脸识别

    我需要在 Android 4 0 的应用程序中实现人脸识别登录 由于 Android Ice Cream Sandwich 中提供了人脸识别解锁功能 是否有任何开放的 SDK 或内置库来实现此功能 到目前为止 我遇到过外部 API 例如ht
  • Jenkins 管道 sh returnsstdout 不工作

    我正在尝试使用 Jenkins pipeline sh 命令的 returnStdout 功能 此处定义https jenkins io doc pipeline steps workflow durable task step code
  • JAR 文件:为什么提取然后压缩 JAR 文件会创建与原始大小不同的文件?

    我试图编辑提取的 Eclipse 插件 jar 文件中的单个字节 我注意到 在我将文件重新压缩为 jar 后 生成的文件比原始文件大 仅 1 并且该插件不起作用 Eclipse 已启动 但在选择工作区后静默关闭 回滚到原来的插件可以让它成功
  • 删除 index.php 并处理两个 Codeigniter 站点的子域(当其中一个站点位于另一个站点时)

    我有两个 Codeigniter 站点 一个位于另一个站点的子目录中 我需要一些帮助来修改我的 htaccess 文件以从两者中删除 index php 第一个站点 http subdomain domain com存储在 home sit
  • 将 2D 数组传递给 C++ 函数

    我有一个函数 我想将可变大小的二维数组作为参数 到目前为止我有这个 void myFunction double myArray myArray x y 5 etc 我在代码中的其他地方声明了一个数组 double anArray 10 1
  • 使用裁剪工具进行图像裁剪的 Django 应用程序

    我需要一个在客户端裁剪图像的应用程序 我的意思是 使用像 Jcrop jquery 插件这样的裁剪工具 我找到了这个工具 django 图像裁剪器 https github com marazmiki django image croppe
  • CUDA/PTX 32 位与 64 位

    CUDA 编译器可以选择生成 32 位或 64 位 PTX 这些有什么区别呢 是不是像 x86 一样 NVidia GPU 实际上也有 32 位和 64 位 ISA 还是仅与主机代码有关 指针肯定是最明显的区别 http docs nvid
  • NanoHTTPD - 将 https 流转换为 http

    为了克服 Chromecast 对来自自认证 https 服务器 在我的例子中是 Subsonic 音乐服务器 进行流传输的限制 我正在利用已经作为我的 Android 应用程序的一部分运行的 NanoHTTPD 服务器实例 这个想法是从