将opus音频流通过RTP传输到Android设备

10

我希望能够直接使用ffmpeg将音频(opus编解码)流式传输到安卓设备。

在电脑上,我开始了流媒体的传输:

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

我做错了什么?谢谢任何帮助。


<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>? - fionbio
1个回答

2
使用 RTP 时,您在计算机上启动流服务器。因此,在 ffmpeg 命令行中,您必须指定您的计算机 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


在Android客户端中,应该从ffmpeg命令行指定PC的IP地址还是使用自己的IP地址? - gregm
是的 - Android客户端需要使用ffmpeg命令行中指定的URL,其中包含PC的IP地址。 - Markus Schumann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接