【问题标题】:Bitmap over Wi-Fi best sizeWi-Fi 上的位图最佳尺寸
【发布时间】:2014-05-04 16:35:19
【问题描述】:

我正在开发一个应用程序,它可以将相机帧和音频从一部 Android 手机发送到另一部 将 UDP 与 DatagramPacket 类一起使用 我已经设法发送录制的音频并在另一边播放 我还设法通过

捕获相机帧
    Camera.PreviewCallback previewCalBac = new PreviewCallback() {

        @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
            if (data != null) {
//              mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                Log.d("CAMERA", "CHANGED" + data.length);
                startStreamingVideo(data);
            }
        }
    };

发送操作是这样的

private void startStreamingVideo(byte[] data) {
        Log.d(VIDEO_CLIENT_TAG, "Starting the video stream");
        if(data!=null){
        currentlySendingVideo = true;
        startVStreaming(data);}
        else{
            Log.d(VIDEO_CLIENT_TAG, "NULL DATA");
        }
    }

    private void startVStreaming(final byte[] data) {
        Log.d(VIDEO_CLIENT_TAG,
                "Starting the background thread to stream the video data");
        Thread streamThread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Log.d(VIDEO_CLIENT_TAG, "Creating the datagram socket");
                    DatagramSocket socket = new DatagramSocket();
                    Log.d(VIDEO_CLIENT_TAG, "Creating the buffer of size "+ data.length);
                    byte[] buffer = new byte[4096];
                    Log.d(VIDEO_CLIENT_TAG, "Connecting to "+ ipAddress.getText().toString() + ":" + VPORT);
                    final InetAddress serverAddress = InetAddress.getByName(ipAddress.getText().toString());
                    Log.d(VIDEO_CLIENT_TAG, "Connected to "+ ipAddress.getText().toString() + ":" + VPORT);
                    Log.d(VIDEO_CLIENT_TAG,"Creating the reuseable DatagramPacket");
                    DatagramPacket packet;
                    Log.d(VIDEO_CLIENT_TAG, "Creating the VideoRecord");
//                  recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,RECORDING_RATE, CHANNEL, FORMAT, data.length);
//                  Log.d(VIDEO_CLIENT_TAG, "VideoRecord recording...");
//                  recorder.startRecording();
                    while (currentlySendingVideo == true) {
                        // read the data into the buffer
                        Log.d(VIDEO_CLIENT_TAG, "Here0");
//                      int read = recorder.read(data, 0, data.length);
                        Log.d(VIDEO_CLIENT_TAG, "Here");
                        // place contents of buffer into the packet
                        packet = new DatagramPacket(data, 4096,serverAddress, VPORT);
                        Log.d(VIDEO_CLIENT_TAG, "Here1");
                        // send the packet
                        socket.send(packet);
                        Log.d(VIDEO_CLIENT_TAG, "Here2");
                    }
                    Log.d(VIDEO_CLIENT_TAG, "VideoRecord finished recording");
                } catch (Exception e) {
                    Log.e(VIDEO_CLIENT_TAG, "HERE Exception: " + e);
                }
            }
        });
        // start the thread
        streamThread.start();
    }

服务器端我可以知道我正在接收数据包 问题是位图图像字节[]太大而无法发送 我需要将它缩放到最佳大小,以便我可以传输它并以最少的浪费字节接收它。 这个问题有什么解决办法吗?

【问题讨论】:

  • 您是否已经考虑过压缩要传输的数据,即对视频/音频进行编码。
  • 不,我没有尝试过这样的事情。正如我之前所说,你对音频没有问题,它的分离问题是图像的问题,我该如何压缩它?
  • 初学者请看setPreviewFormat()。

标签: android bitmap bytearray android-wifi


【解决方案1】:

不使用 UDP,不。您需要基于 UDP 的协议来处理大于 64K 的消息。没有其他选择。

【讨论】:

  • 如果图像被缩放并制作成更小的尺寸我没有问题
猜你喜欢
  • 1970-01-01
  • 2012-03-19
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多