我想要一部 Android 手机来控制三星智能电视上的视频流播放。我可以通过视频流的 URL 向电视发送 UPnP 命令。不幸的是,三星电视不接受指向本地网络之外的 URL。为了使远程流工作,我必须通过我的手机循环流量,这样它看起来就像是三星电视的本地 URL。
我可能必须在手机上运行一个简单的代理类型的服务器。电话始终知道流 URL 是什么,因此代理可以非常简单,它始终接收任何传入请求并将其通过管道传输到外部服务器上的视频流。
我尝试过运行套接字连接并简单地将输入流从外部服务器复制到套接字服务器连接的输出流。虽然使用这个网络浏览器能够下载文件,但所有元数据都丢失了,而且每次文件下载完成时我似乎也遇到了一个损坏的管道异常。媒体播放器似乎根本不理解流,例如在 VLC 上没有播放。
对于服务器,我使用了一段非常简单的代码,如下所示:
public class ServerThread implements Runnable {
public void run() {
try {
if (SERVERIP != null) {
serverSocket = new ServerSocket(SERVERPORT);
while (true) {
// listen for incoming clients
Socket client = serverSocket.accept();
client.setSoTimeout(20000);
client.setKeepAlive(true);
OutputStream os = client.getOutputStream();
OutputStream out = new BufferedOutputStream(os);
InputStream is = openHttpConnection("<URL to the stream>");
copyStream(is, out);
对于复制流代码:
private static void copyStream(InputStream input, OutputStream output)
throws IOException {
int bytesRead;
try {
while ((bytesRead = input.read()) != -1) {
output.write(bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
}
output.flush();
output.close();
input.close();
}
我可以做些什么来简单地将所有元数据转发到套接字连接吗?还是我也做错了什么?
是否有任何从 Android 手机向媒体播放器提供视频的示例,我可以使用它来了解如何正确格式化响应流?
谢谢!!