2017-04-27 62 views
10

Chcę strumieniowo audio (kodek opus) z ffmpeg bezpośrednio do urządzenia z systemem Android.Stream opus audio rtp na urządzenie z Androidem

Na PC i rozpocząć strumieniowe:

./ffmpeg -re -stream_loop -1 -i akgld-c8mxm.opus -acodec libopus -ac 1 -ab 96k -vn -f rtp rtp://192.168.0.100:6000 

Gdzie 192.168.0.100 - adres lokalny wifi z mojego telefonu.

na urządzeniu z Androidem próbowałem grać strumieniowe:

public void tryPlayStream() { 
     String ip = Utils.wifiIpAddress(this); 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build(); 
     StrictMode.setThreadPolicy(policy); 
     AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE); 
     audio.setMode(AudioManager.MODE_IN_COMMUNICATION); 
     audioGroup = new AudioGroup(); 
     audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION); 
     InetAddress inetAddress; 
     try { 
      inetAddress = InetAddress.getByName(ip); 
      audioStream = new AudioStream(inetAddress); 
      audioStream.setCodec(AudioCodec.PCMA); 
      audioStream.setMode(RtpStream.MODE_RECEIVE_ONLY); 
      InetAddress inetAddressRemote = InetAddress.getByName(ip); 
      audioStream.associate(inetAddressRemote, 6000); 
      audioStream.join(audioGroup); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

W LogCat widzę następujące linie:

E/AudioRecord: AudioFlinger could not create record track, status: -1 
E/AudioGroup: cannot initialize audio device 

Co robię źle? Dzięki za pomoc

+0

? – fionbio

Odpowiedz

1

Z RTP uruchamiasz serwer streamingowy na swoim komputerze. Więc w ffmpeg poleceń trzeba podać adres IP komputera, a nie cel:

./ffmpeg -re -stream_loop -1 -i akgld-c8mxm.opus -acodec libopus -ac 1 -ab 96k -vn -f rtp rtp://YOUR_PC_S_IP_ADDRESS:6000 

na Android stronie będziesz potrzebował klienta RTP/RTSP. Spróbowałbym: https://github.com/pedroSG94/rtmp-rtsp-stream-client-java

+0

Czy w kliencie z systemem Android powinien on podać adres IP komputera z wiersza poleceń ffmpeg lub użyć własnego adresu IP? – gregm

+0

Tak - klient Android musi używać adresu URL określonego w wierszu polecenia ffmpeg, który zawiera adres IP komputera. –

Powiązane problemy