【问题标题】:Regarding video and audio stream over socket.io from android camera live关于来自android camera live的socket.io上的视频和音频流
【发布时间】:2017-08-21 08:44:36
【问题描述】:

我想通过 socket.io 将实时视频从 android 相机流式传输到设备,但我无法发送音频

因为我正在使用surfaceview来创建camra视图

在相机预览中,我正在获取视频字节

但字节不包含任何音频,它只包含视频帧

帮助我如何将视频和音频同时合并为字节数组并发送到另一台设备,同时录制和另一端如何解码

我使用的代码是这样的

 mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {

            private long timestamp = 0;

            public synchronized void onPreviewFrame(byte[] data, Camera camera) {

                int size = data.length;
                Camera.Size previewSize = camera.getParameters().getPreviewSize();
                YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, previewSize.width, previewSize.height, null);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                yuvimage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 80, baos);
//                yuvimage.compressToJpeg(new Rect(0, 0, 128, 96), 80, baos);
                byte[] jdata = baos.toByteArray();
//                int sizeOfData = jdata.length;

                DatagramSocket s;
                try {
                    s = new DatagramSocket();
                    s.setBroadcast(true);
                    s.setSoTimeout(TIMEOUT_MS);
                    InetAddress local = InetAddress.getByName(IPAdresse.getText().toString());

                    DatagramPacket p = new DatagramPacket(jdata, jdata.length, local, server_port);
                    s.send(p);

                } catch (SocketException e) {
                    e.printStackTrace();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

//                // Convert to Bitmap
                Bitmap bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);
                m_VideCaptureBitmap.setImageBitmap(bmp);

                Log.v("CameraTest", "Frame size = " + data.length);
                timestamp = System.currentTimeMillis();
                try {
                    camera.addCallbackBuffer(data);
                } catch (Exception e) {
                    Log.e("CameraTest", "addCallbackBuffer error");
                    return;
                }
                return;
            }
        });

        try {
            mCamera.startPreview();
        } catch (Throwable e) {
            mCamera.release();
            mCamera = null;
            e.printStackTrace();
            return;
        }

【问题讨论】:

    标签: java android sockets


    【解决方案1】:

    您需要设计/使用某种协议来共享一个连接来发送视频和音频数据,或者您可以只使用另一个连接(例如,由服务器端口指定)用于音频,因此您将拥有一个用于音频的连接和另一个用于视频。

    关于如何将音频从 android mic 抓取到字节数组中,这里已经有了答案:android record mic to ByteArray without saving audio file

    【讨论】:

    • 你的意思是我必须以不同的方式发送音频和视频
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多