2017-04-27 29 views
10

我想直接流與音頻的ffmpeg(OPUS編解碼器),以機器人裝置。流OPUS音頻RTP到機器人設備

在PC我開始流:

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

凡192.168.0.100 - 我的手機的本地WiFi地址。

在Android設備我試圖發揮流:

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(); 
     } 
    } 

在logcat中我看到下一行:

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

什麼即時做錯了什麼?感謝您的幫助

+0

? – fionbio

回答

1

隨着RTP啓動您的PC上的流媒體服務器。因此,在您的ffmpeg命令行,你必須指定你的PC的IP地址而不是目標:

./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 

在Android端,您將需要一個RTP/RTSP客戶端。我會嘗試: https://github.com/pedroSG94/rtmp-rtsp-stream-client-java

+0

在Android客戶端應該從ffmpeg命令行指定PC的IP地址還是使用它自己的IP地址? – gregm

+0

是 - Android客戶端需要使用包含PC IP地址的ffmpeg命令行中指定的URL。 –