Skip to content

Commit

Permalink
fix rtsp audio bug and more
Browse files Browse the repository at this point in the history
  • Loading branch information
pedro committed May 10, 2017
1 parent 3c34d6e commit 9ee0902
Show file tree
Hide file tree
Showing 15 changed files with 303 additions and 274 deletions.
1 change: 0 additions & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -113,7 +113,7 @@ public void onDrawerClosed(View view) {
etVideoBitrate.setText("2500");
etFps.setText("30");
etAudioBitrate.setText("128");
etSampleRate.setText("44100");
etSampleRate.setText("16000");
etWowzaUser = (EditText) navigationView.getMenu().findItem(R.id.et_wowza_user).getActionView();
etWowzaPassword =
(EditText) navigationView.getMenu().findItem(R.id.et_wowza_password).getActionView();
Expand Down
10 changes: 5 additions & 5 deletions builder/src/main/java/com/pedro/builder/RtspBuilder.java
Expand Up @@ -4,7 +4,6 @@
import android.hardware.Camera;
import android.media.MediaCodec;
import android.os.Build;
import android.util.Base64;
import android.view.SurfaceView;
import com.pedro.encoder.audio.AudioEncoder;
import com.pedro.encoder.audio.GetAccData;
Expand Down Expand Up @@ -64,6 +63,7 @@ public boolean prepareVideo(int width, int height, int fps, int bitrate, int rot

public boolean prepareAudio(int bitrate, int sampleRate, boolean isStereo) {
rtspClient.setSampleRate(sampleRate);
rtspClient.setIsStereo(isStereo);
microphoneManager.createMicrophone(sampleRate, isStereo);
return audioEncoder.prepareAudioEncoder(bitrate, sampleRate, isStereo);
}
Expand All @@ -73,7 +73,10 @@ public boolean prepareVideo() {
return videoEncoder.prepareVideoEncoder();
}

//set 16000hz sample rate because 44100 produce desynchronization audio in rtsp
public boolean prepareAudio() {
microphoneManager.setSampleRate(16000);
audioEncoder.setSampleRate(16000);
microphoneManager.createMicrophone();
rtspClient.setSampleRate(microphoneManager.getSampleRate());
return audioEncoder.prepareAudioEncoder();
Expand Down Expand Up @@ -168,10 +171,7 @@ public void onSPSandPPS(ByteBuffer sps, ByteBuffer pps) {
byte[] mPPS = new byte[pps.capacity() - 4];
pps.position(4);
pps.get(mPPS, 0, mPPS.length);

String sSPS = Base64.encodeToString(mSPS, 0, mSPS.length, Base64.NO_WRAP);
String sPPS = Base64.encodeToString(mPPS, 0, mPPS.length, Base64.NO_WRAP);
rtspClient.setSPSandPPS(sSPS, sPPS);
rtspClient.setSPSandPPS(mPPS, mSPS);
rtspClient.connect();
}

Expand Down
12 changes: 9 additions & 3 deletions encoder/src/main/java/com/pedro/encoder/audio/AudioEncoder.java
@@ -1,13 +1,13 @@
package com.pedro.encoder.audio;

import android.media.MediaCodec;
import android.media.MediaCodecInfo;
import android.media.MediaFormat;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

import com.pedro.encoder.input.audio.GetMicrophoneData;

import com.pedro.encoder.input.audio.MicrophoneManager;
import java.io.IOException;
import java.nio.ByteBuffer;

Expand Down Expand Up @@ -45,7 +45,9 @@ public boolean prepareAudioEncoder(int bitRate, int sampleRate, boolean isStereo
int a = (isStereo) ? 2 : 1;
MediaFormat audioFormat = MediaFormat.createAudioFormat(mime, sampleRate, a);
audioFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitRate);
audioFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);
audioFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, MicrophoneManager.BUFFER_SIZE);
audioFormat.setInteger(MediaFormat.KEY_AAC_PROFILE,
MediaCodecInfo.CodecProfileLevel.AACObjectLC);
audioEncoder.configure(audioFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
running = false;
return true;
Expand Down Expand Up @@ -148,6 +150,10 @@ private void getDataFromEncoder(byte[] data, int size) {
}
}

public void setSampleRate(int sampleRate) {
this.sampleRate = sampleRate;
}

public boolean isRunning() {
return running;
}
Expand Down

0 comments on commit 9ee0902

Please sign in to comment.