java - 将视频流式传输到服务器

标签 java streaming video-streaming

我正在尝试使用 Java 将视频从另一台机器流式传输到服务器,对于初学者来说,我只是尝试使用原始套接字连接和字节流传输文件。然而,事情并没有以同样的方式出现。如果我以这种方式传输文件,我的计算机上的 3MB 文件最终在服务器上会变成 5MB。我正在尝试使用视频文件进行此操作,当我下载它时,生成的文件实际上会“播放”并且长度正确,但没有图像。代码如下:

客户端(流媒体):

public static void main(String[] args){
    Socket sock = null;

    try{
        System.out.println("Connecting...");
        sock = new Socket("server.com", 8080);
        InputStream is = new FileInputStream(new File("Bear.wmv"));
        byte[] bytes = new byte[1024];

        OutputStream stream = sock.getOutputStream();

        int count = is.read(bytes, 0, 1024);
        while (count != -1){
            stream.write(bytes, 0, 1024);
            count = is.read(bytes, 0, 1024);
        }

        is.close();
        stream.close();
        sock.close();

    }catch (Exception e){
        e.printStackTrace();
    }
}

服务器(接收者):

public static void main(String[] args){
    ServerSocket sock = null;
    try {
        sock = new ServerSocket(8080);
    } catch (IOException e) {
        System.out.println("Could not instantiate socket:");
        e.printStackTrace();
        return;
    }

    Socket clientSock = null;
    while(true){

        try{

            System.out.println("Waiting for connection...");
            clientSock = sock.accept();
            final Socket fin = clientSock;
            System.out.println("Connection accepted");
            System.out.println("Spawning thread...");
            Thread trd = new Thread(new Runnable(){
                public void run(){
                    try {
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                        System.out.println("Receiving video...");
                        File video = new File("test.wmv");
                        FileOutputStream fos = new FileOutputStream(video);
                        byte[] data = new byte[1024];
                        int count = fin.getInputStream().read(data, 0, 1024);
                        while (count != -1){
                            fos.write(data, 0, 1024);
                            count = fin.getInputStream().read(data, 0, 1024);
                        }
                        fos.close();
                        fin.close();
                        System.out.println("Done receiving");
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }}
            });
            trd.start();

        }catch(IOException e){
            System.out.println("Could not accept");
            e.printStackTrace();
        }


    }



}

有什么想法吗?提前致谢!

克里斯

最佳答案

所以我找到了问题所在。

我将服务器更改为仅写入“count”个字节

while (count != -1){
       fos.write(data, 0, count);
       count = fin.getInputStream().read(data, 0, 1024);
}

现在可以了:)

谢谢!

关于java - 将视频流式传输到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407232/

相关文章:

android - Android 中的视频流

具有保持事件状态的 Python 流式 http 客户端

c# - 流式传输 Ogg 文件

java - 如何在直播 Android 中播放视频之前显示进度条?

video - 在H264中,field_pic_flag是什么意思,和编码间隔有关系吗?

java - 找到句子中元音最多的单词(可以是几个彼此等价的最大单词)

java - Google Blobstore 提供的图像的 Google Appengine 签名或临时 URL

java - 如何使用运行时?

java - 如何使用通用图像加载器在 ImageView 中设置图像适合 XY 而不会划伤?

c++ - OpenCV VideoWriter 是否支持将帧写入 RTSP?