如何使用字节流发送视频文件?

时间:2016-05-03 21:50:48

标签: java video udp client-server

所以,我有.mp4格式的视频,我把它转换成字节并发送到我的服务器并将字节写入文件。

当我尝试打开新文件时,它会说“找不到正确的编解码器”或类似内容。

那么,如何使用编解码器将视频传输到客户端,以便它可以在我的服务器端播放。

Clinet.java

File file = new File("/Users/Batman/Documents/Eclipse/Record/outo.flv");
    InputStream is = new FileInputStream(file);
    OutputStream os = RTSPSocket.getOutputStream();
    long len = file.length();
    byte[] bytes = new byte[(int) len];
    int offset = 0;
    int numRead = 0;
    while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
        offset += numRead;
    }
    String s = String.valueOf(len);
    RTSPBufferedWriter.write(s);
    RTSPBufferedWriter.flush();
        os.write(bytes);
    os.close();
    is.close();

Server.java

inputStream = socket.getInputStream();
                byte[] bytes = new byte[1415874];
                for (int i = 0; i < bytes.length; i++) {
                    fileOutputStream.write(inputStream.read(bytes));
                }
                fileOutputStream.close();
                inputStream.close();

由于

1 个答案:

答案 0 :(得分:0)

您以ASCII格式发送长度,但您从不单独阅读。相反,您假设硬连线长度为1415874.因此输入中的长度仍然存在并写入目标文件。

在没有分隔符的情况下以ASCII发送长度无论如何都不会起作用,因为您在接收端不知道长度是多长。您应使用long将长度作为DataOutputStream.writeLong()发送,并通过DataInputStream.readLong()进行阅读。实际上,您应该按照this answer中的说明进行操作。