0

我正在开发一个 WebRTC 流媒体应用程序。这个想法是从麦克风捕获信号,进行一些实时 C/C++ 处理 (JNI),并将处理后的信号流式传输到服务器。当应用程序处于前台时,该过程按预期工作。但是,它开始滞后,应用程序进入后台的那一刻,或者当我锁定手机时。

我已将优先级设置为 Process.THREAD_PRIORITY_URGENT_AUDIO 但它仍然滞后。对于如何解决滞后问题,我们将不胜感激。

   private class AudioRecordThread extends Thread {
    private volatile boolean keepAlive = true;

    public AudioRecordThread(String name) {
      super(name);
    }

    @Override
    public void run() {
      Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
      Logging.d(TAG, "AudioRecordThread" + WebRtcAudioUtils.getThreadInfo());
      assertTrue(audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING);

      // Audio recording has started and the client is informed about it.
      doAudioRecordStateCallback(AUDIO_RECORD_START);

      // do some C/C++ processing
      long st_time = System.currentTimeMillis();
      res = org.webrtc.audio.AudioEngine.processBuffer(100*num_buffers, containerBufferShort);
      Log.i("process_time", String.valueOf(System.currentTimeMillis()-st_time));

      nativeDataIsRecorded(nativeAudioRecord, bytesRead);

    }

  }

Update1:​​我注意到当应用程序在后台时,process_time(C/C++ 代码处理音频缓冲区的时间)变成了两倍。我不明白这种行为!

更新 2:此行为不会在 Android 模拟器上发生,但会在我的实际 Android 设备(OnePlus Nord N200)上发生

Update3:正如@emandt 所建议的,我在前台和后台模式下分析了 CPU 使用率。CPU 利用率保持不变,而功耗明显下降。这可能表明应用程序在后台时 CPU 时钟速度受到限制?

在此处输入图像描述

4

0 回答 0