25

Tôi đang cố gắng sử dụng AudioRecord với AudioSource.VOICE_DOWNLINK trên Nexus 5X, Android 7.1 (bản dựng của riêng tôi từ AOSP).Ghi âm cuộc gọi - làm cho nó hoạt động trên Nexus 5X (root hoặc ROM tùy chỉnh có thể)

Tôi đã qua giai đoạn quyền - đã chuyển APK của tôi sang các ứng dụng đặc quyền, đã điều chỉnh thành AudioRecord trong nguồn Android để ngừng loại trừ ngoại lệ về nguồn này.

Hiện tôi đang nhận các bộ đệm ghi trống trong khi gọi điện thoại.

Tôi biết rằng có rất nhiều ứng dụng ghi âm cuộc gọi và chúng hoạt động trên các thiết bị khác. Tôi cũng đã thấy một số ứng dụng có thể thực hiện một số hack trên N5 bắt nguồn và làm cho nó hoạt động.

Tôi muốn đạt được điều tương tự trên Nexus 5X - BẤT K adjustment điều chỉnh nào phù hợp với tôi, bao gồm thay đổi phiên bản Android, sửa đổi trình điều khiển Qualcomm, tệp cấu hình thiết bị, v.v. - về cơ bản mọi thứ có thể đạt được trong ROM tùy chỉnh.

Tôi đã cố gắng rối tung xung quanh với mã nền tảng - phần cứng/qcom/audio/hal/voice.c, đặc biệt là chức năng voice_check_and_set_incall_rec_usecase, nhưng không thể có ý nghĩa từ nó cho đến nay.

Cũng kiểm tra thiết bị/LGE/Bullhead/mixer_paths.xml, thấy có một phần liên quan đến ghi âm cuộc gọi:

<!-- Incall Recording --> 
<ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" /> 
<ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" /> 
<ctl name="MultiMedia8 Mixer VOC_REC_UL" value="0" /> 
<ctl name="MultiMedia8 Mixer VOC_REC_DL" value="0" /> 
<!-- Incall Recording End --> 

Nhưng tôi cũng không thể làm cho tinh thần ra khỏi nó hoặc làm thế nào nó có thể được giúp đỡ.

+0

Bạn có nhận được bất kỳ yêu cầu nào không? –

+0

thử đặt audioRecoder.record() trong một lần thử và kiểm tra. Cũng đăng mã ghi âm của bạn một chút. –

+0

Không có sự cố, vì vậy không có điểm nào trong thử-catch. – SirKnigget

Trả lời

0

Không chắc chắn đó có phải là vấn đề cụ thể của Nexus 5 hay không nhưng thường là lớp được sử dụng để ghi âm cuộc gọi là MediaRecorder. Bạn đã thử thay thế AudioRecorder bằng một số MediaRecorder?

Dựa trên this chồng tràn câu hỏi, tôi nghĩ bạn có thể thử các mã sau đây dựa trên Ben blog post:

import android.media.MediaRecorder; 
import android.os.Environment; 

import java.io.File; 

import java.io.IOException; 


public class CallRecorder { 

    final MediaRecorder recorder = new MediaRecorder(); 
    final String path; 

    /** 
    * Creates a new audio recording at the given path (relative to root of SD card). 
    */ 
    public CallRecorder(String path) { 
     this.path = sanitizePath(path); 
    } 

    private String sanitizePath(String path) { 
     if (!path.startsWith("/")) { 
      path = "/" + path; 
     } 
     if (!path.contains(".")) { 
      path += ".3gp"; 
     } 
     return Environment.getExternalStorageDirectory().getAbsolutePath() + path; 
    } 

    /** 
    * Starts a new recording. 
    */ 
    public void start() throws IOException { 
     String state = android.os.Environment.getExternalStorageState(); 
     if(!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
      throw new IOException("SD Card is not mounted. It is " + state + "."); 
     } 

     // make sure the directory we plan to store the recording in exists 
     File directory = new File(path).getParentFile(); 
     if (!directory.exists() && !directory.mkdirs()) { 
      throw new IOException("Path to file could not be created."); 
     } 

     recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile(path); 
     recorder.prepare(); 
     recorder.start(); 
    } 

    /** 
    * Stops a recording that has been previously started. 
    */ 
    public void stop() throws IOException { 
     recorder.stop(); 
     recorder.release(); 
    } 

} 

Trong ví dụ này tôi đã sử dụng MediaRecorder.AudioSource.VOICE_CALL nhưng bạn có thể kiểm tra tùy chọn khác như MediaRecorder.AudioSource.VOICE_COMMUNICATION và cũng là chỉ để xem có sự cố phần cứng nào trên điện thoại của bạn không.

+0

Tôi cần sử dụng AudioRecord để ghi lại trong thời gian thực. – SirKnigget

+0

** Bây giờ tôi đang nhận được bộ đệm trống trong quá trình gọi điện thoại ** - có phải vì cả AudioRecorder và cuộc gọi sử dụng cùng một kênh ???? có u đã cố gắng nghe một số nguồn khác nhau, như đặt cuộc gọi trên loa và sau đó thử – Debu

+0

Tôi không quan tâm đến việc thực hiện cuộc gọi trên loa, tôi cần phải ghi lại cuộc gọi đúng từ AudioSource.VOICE_CALL. – SirKnigget

Các vấn đề liên quan