0

I'm writing an Android AirPlay receiver. I use java-airplay-server from GitHub, But when I try to stream PCM Byte audio with Android AudioTrack ,Works fine on mobile but doesn't stream properly on Android TV and it's all noise How to solve

private final AirPlayConsumer airPlayConsumer =
        new AirPlayConsumer() {
            @Override
            public void onVideoFormat(VideoStreamInfo videoStreamInfo) {
                videoDecoder = new VideoDecoder(airPlayConfig);
                visibilityCallback.showSurface();
            }

            @Override
            public void onVideo(byte[] packet) {
                if (videoDecoder != null) videoDecoder.addToBuffer(new DataPacket(packet));
            }

            @Override
            public void onVideoSrcDisconnect() {
                visibilityCallback.hideSurface();

                if (videoDecoder != null) {
                    videoDecoder.releaseDecoder();
                    videoDecoder = null;
                }
            }

            @Override
            public void onAudioFormat(AudioStreamInfo audioStreamInfo) {
                int bufSize = AudioTrack.getMinBufferSize(44100,
                        AudioFormat.CHANNEL_OUT_STEREO,
                        AudioFormat.ENCODING_PCM_16BIT);

                audio = new AudioTrack(AudioManager.STREAM_MUSIC,
                        44100, //sample rate
                        AudioFormat.CHANNEL_OUT_STEREO, //2 channel
                        AudioFormat.ENCODING_PCM_16BIT, // 16-bit
                        bufSize,
                        AudioTrack.MODE_STREAM );
                new Thread(new Runnable() {
                    public void run(){
                        audio.play();
                    }
                }).start();
            }
            @Override
            public void onAudio(byte[] bytes) {
                byte[] audioDecoded = new byte[480 * 4];
                FdkAacLib.decodeFrame(bytes, audioDecoded);
                audio.write(audioDecoded,0,480*4);
            }

            @Override
            public void onAudioSrcDisconnect() {
                audio.stop();
                audio.release();
                audio.flush();
            }
        };
cpliang
  • 65
  • 1
  • 6

0 Answers0