2017-04-27 31 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。 –