2012-05-11 44 views
27

Pracowałem nad projektem, który znacznie skorzystałby z modyfikacji wywołań strumieniowych. Zostało to wielokrotnie powiedziane/założone jako nieosiągalne, ponieważ większość ludzi uważa, że ​​pętla sprzętowa dla dźwięku w trakcie połączenia jest całkowicie odłączona od głównego MCU urządzenia.Modyfikowanie strumienia audio połączenia w systemie Android 4.0 ICS

Pytania takie jak Stream audio to a phone call Android otrzymały odpowiedzi stwierdzające, że nie można uzyskać dostępu do audio. Zgadzam się, że jest to zdecydowanie niemożliwe z interfejsu API Androida, ale nie jest całkowicie jasne, czy sprzęt RZECZYWIŚCIE jest całkowicie odłączony.

stackoverflow użytkownika artsylar powiedział, że były one w stanie zmodyfikować „warstwę ramową” Android OS wstrzyknąć nagrany dźwięk do strumieni rozmowy, który byłby ogromny krok naprzód (patrz Play an audio clip onto an ongoing call, komentarz artsylar na temat wybranego odpowiedź). Zakładając, że sukces artslar jest ważny, zdecydowanie istnieje sposób kontrolowania dźwięku wywołania połączenia przez modyfikację struktury (zakładam, że baza telefoniczna w źródle Androida).

Zasadniczo całkowicie zgadzam się, że modyfikowanie lub kontrolowanie strumienia wywoływania jest niemożliwe z poziomu warstwy aplikacji. Jednak jestem zainteresowany dostosowywaniem systemu operacyjnego Android w framework lub Radio Interface Layer; Wydaje się, że artylar odniósł sukces, ale w literaturze otwartej nie ma żadnego wyjaśnienia, w jaki sposób. Biorąc pod uwagę obecny stan technologii Androida, czy ktokolwiek może wyjaśnić powyższe kwestie, aby rzeczywiście ustalić, czy kontrolowanie połączenia audio jest możliwe, modyfikując podstawowy system operacyjny Android i dobrą ścieżkę do osiągnięcia tego celu?

Jestem przekonany, że ostateczne wyjaśnienie tej kwestii będzie miało wielką wartość dla społeczności open source.

Dzięki!

+1

Czy udało Ci się zmodyfikować strumień wywoławczy? – B770

+1

Jaki jest obecny stan Twoich badań? –

Odpowiedz

5

Jest to bardzo trudne, ponieważ dotyczy obsługi systemu Linux Kernal w systemie operacyjnym Android.

Nie tylko nie ma wsparcia interfejsu API, ale także problem bezpieczeństwa nie jest dozwolony.

Będąc profesjonalistą w dziedzinie inżynierii oprogramowania, a zwłaszcza programistami, nigdy nie zakładamy, że komuś zależy na inwencji, a powiązany projekt jest ważny do momentu przetestowania projektu.

strumieniowe także dźwięk podczas rozmowy może powoływać się kwestią prywatności i kwestii bezpieczeństwa wśród użytkowników smartfonów i usługodawcy telefonii

+1

Jądro systemu Linux? Nie. Obsługa sprzętu jest również niezbędna, ponieważ telefony używają (mic -> procesor pasma podstawowego, mic -> OS) podwójnego łańcucha, a nie (mic -> OS -> pasmo podstawowe, jak można się spodziewać). –

+0

@ kagali-san, jeśli mówisz, że to jest jak "mic -> procesor pasma podstawowego", to jak działają zestawy słuchawkowe Bluetooth? Więc nie sądzę, że masz rację, to bardziej jak "mic -> OS -> baseband". –

+3

@ André, jest to mało udokumentowane, ale nie - przesyłanie danych przez Bluetooth również odbywa się za pomocą transferu na chip. Możesz google kilka zestawów danych i schematów blokowych/diagramów chińskich MT6575, MT6589 i odpowiednich radiowych układów MT6627, MT6627 - podejrzewam, że kanał MRGPCM między chipami jest ścieżką przesyłania audio. Jest też coś, co nazywa się DAIBT, którego Chińczycy używają w niektórych programach do oznaczania części do przetwarzania dźwięku. Co więcej, niektóre telefony nie odzwierciedlają nawet dźwięku z mikrofonu wysłanego na połączenie w paśmie podstawowym. –

11

Jest to technicznie możliwe, aby wstrzyknąć audio do uplink połączeń głosowych w niektórych platformach (Qualcomm MSM8960 i APQ8064, na przykład). Wsparcie istnieje na poziomie sprzętu i na poziomie sterownika urządzenia. Jednak aby ta funkcjonalność była dostępna dla zwykłych aplikacji, trzeba utworzyć niestandardową pamięć ROM systemu Android, w której dodano wszystkie niezbędne części przestrzeni użytkownika zarówno na warstwach Java, jak i na macierzystych warstwach systemu Android.

Krótka odpowiedź brzmi: nie, nie ma standardowego sposobu robienia tego jako programista aplikacji (nie ma znaczenia, jeśli używasz SDK lub NDK).
Jeśli pracujesz dla OEM lub w inny sposób, możesz zbudować i flashować własne ROMy z Androidem, prawdopodobnie będziesz mógł uzyskać potrzebne informacje, pytając swojego dostawcę platformy.

Powiązane problemy