25

Próbuję użyć AudioRecord z AudioSource.VOICE_DOWNLINK na Nexusie 5X, Android 7.1 (moja własna kompilacja z AOSP).Nagrywanie rozmów - spraw, aby działał na Nexusie 5X (rootowanie lub niestandardowa ROM-ka)

Jestem już na etapie pozwoleń - przeniesiono mój plik APK do aplikacji uprzywilejowanych, wprowadzono dostosowanie do źródła AudioRecord w Androidzie, aby przestać wyrzucać wyjątek dotyczący tego źródła.

Teraz otrzymuję puste bufory zapisu podczas rozmowy telefonicznej.

Wiem, że istnieje wiele aplikacji do nagrywania połączeń i działają one na innych urządzeniach. Widziałem też niektóre aplikacje, które potrafią wykonać atak na zrootowanym N5 i sprawiają, że działa.

Chcę osiągnąć to samo na Nexusie 5X - Dowolna regulacja jest dla mnie OK, w tym zmiana wersji Androida, modyfikacja sterowników Qualcomm, plików konfiguracji urządzeń itp. - w zasadzie wszystko, co można osiągnąć w niestandardowej pamięci ROM.

Próbowałem ingerować w kod platformy - hardware/qcom/audio/hal/voice.c, szczególnie w funkcji voice_check_and_set_incall_rec_usecase, ale nie mogłem z tego jakoś wycisnąć.

sprawdzane również urządzenie/LGE/byczek/mixer_paths.xml, znalazł tam sekcja związane zadzwonić nagrania:

<!-- 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 --> 

Ale również nie mogła mieć sens z niego i jak można pomóc.

+0

Czy otrzymujesz jakikolwiek test? –

+0

spróbuj umieścić audioRecoder.record() w próbie złapania i sprawdzenia. Dodaj również trochę kodu do nagrywania. –

+0

Nie ma awarii, więc nie ma sensu w try-catch. – SirKnigget

Odpowiedz

0

Nie jestem pewien, czy jest to problem specyficzny dla Nexusa 5, ale zazwyczaj klasa używana do rejestrowania połączeń to MediaRecorder. Czy próbowałeś zastąpić AudioRecorder przez MediaRecorder?

podstawie this przepełnienia stosu pytanie, myślę, że można spróbować następujący kod w oparciu o 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(); 
    } 

} 

W tym przykładzie użyłem MediaRecorder.AudioSource.VOICE_CALL ale można przetestować inne opcje jak MediaRecorder.AudioSource.VOICE_COMMUNICATION a także mikrofon, aby sprawdzić, czy w twoim telefonie występują problemy ze sprzętem.

+0

Potrzebuję użyć AudioRecord do nagrywania w czasie rzeczywistym. – SirKnigget

+0

** Teraz otrzymuję puste bufory do nagrywania podczas rozmowy telefonicznej ** - czy to dlatego, że zarówno AudioRecorder, jak i połączenie używają tego samego kanału ???? próbowałeś słuchać różnych źródeł, na przykład dzwonisz do głośnika, a następnie próbujesz – Debu

+0

Nie jestem zainteresowany połączeniem rozmowy z głośnikiem, muszę poprawnie nagrać rozmowę z AudioSource.VOICE_CALL. – SirKnigget

Powiązane problemy