我希望有一部安卓手机来控制三星智能电视上的视频流播放,我可以通过UPnP命令向电视发送指向视频流的URL。不幸的是,三星电视不接受指向本地网络以外的URL。为了使远程流起作用,我必须将流量通过我的手机循环,这样它看起来像是三星电视的本地URL。
我可能需要在手机上运行一个简单的代理服务器。手机总是知道流URL,因此代理可以非常简单,始终接收任何传入请求并将其导向外部服务器上的视频流。
我尝试运行套接字连接,并简单地将外部服务器的输入流复制到套接字服务器连接的输出流中。虽然使用此方法,Web浏览器能够下载文件,但所有元数据都丢失了,每次文件下载完成时似乎也会出现一个损坏的管道异常。媒体播放器似乎根本无法理解该流,例如VLC没有任何播放。
对于服务器,我正在使用像这样的非常简单的代码:
我可能需要在手机上运行一个简单的代理服务器。手机总是知道流URL,因此代理可以非常简单,始终接收任何传入请求并将其导向外部服务器上的视频流。
我尝试运行套接字连接,并简单地将外部服务器的输入流复制到套接字服务器连接的输出流中。虽然使用此方法,Web浏览器能够下载文件,但所有元数据都丢失了,每次文件下载完成时似乎也会出现一个损坏的管道异常。媒体播放器似乎根本无法理解该流,例如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手机向媒体播放器提供视频服务的示例,我可以用来了解如何正确格式化响应流?
谢谢!