Skip to content

Commit

Permalink
Success. publish an Audio.
Browse files Browse the repository at this point in the history
  • Loading branch information
shogo4405 committed Dec 9, 2016
1 parent 75ac3d6 commit f150716
Show file tree
Hide file tree
Showing 10 changed files with 42 additions and 67 deletions.
14 changes: 7 additions & 7 deletions app/app.iml
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,20 @@
<sourceFolder url="file:https://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file:https://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file:https://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file:https://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file:https://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file:https://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file:https://$MODULE_DIR$/build/intermediates/builds" />
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
</activity>
</application>

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera" />

</manifest>
8 changes: 8 additions & 0 deletions app/src/main/java/com/haishinkit/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.hardware.Camera;

import com.haishinkit.media.AudioInfo;
import com.haishinkit.rtmp.RTMPConnection;
Expand All @@ -22,6 +23,13 @@ protected void onCreate(Bundle savedInstanceState) {

cameraView = new CameraView(this);
stream.attachAudio(new AudioInfo());

Camera camera = cameraView.getCamera();
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(320, 240);
parameters.setPreviewFrameRate(30);
camera.setParameters(parameters);

//stream.attachCamera(cameraView.getCamera());
setContentView(cameraView);

Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/com/haishinkit/iso/AudioSpecificConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public static AudioObjectType rawValue(final byte rawValue) {
this.rawValue = rawValue;
}

public Byte rawValue() {
public final Byte rawValue() {
return rawValue;
}
}
Expand Down Expand Up @@ -116,7 +116,7 @@ public static SamplingFrequency rawValue(final byte rawValue) {
this.rawValue = rawValue;
}

public Byte rawValue() {
public final Byte rawValue() {
return rawValue;
}
}
Expand Down Expand Up @@ -161,7 +161,7 @@ public static ChannelConfiguration rawValue(final byte rawValue) {
this.rawValue = rawValue;
}

public Byte rawValue() {
public final Byte rawValue() {
return rawValue;
}
}
Expand Down Expand Up @@ -203,7 +203,7 @@ public final byte[] toADTS(final int length) {
adts[0] = (byte) 0xFF;
adts[1] = (byte) 0xF9;
adts[2] = (byte) (((type.rawValue() - 1) << 6) | (frequency.rawValue() << 2) | (channel.rawValue() >> 2));
adts[3] = (byte) ((channel.rawValue() & 3) | fullSize >> 11);
adts[3] = (byte) (((channel.rawValue() & 3) << 6) | (fullSize >> 11));
adts[4] = (byte) ((fullSize & 0x7FF) >> 3);
adts[5] = (byte) (((fullSize & 7) << 5) | 0x1F);
adts[6] = (byte) 0xFC;
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/java/com/haishinkit/media/AudioInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import android.media.AudioRecord;
import android.media.MediaRecorder;

import com.haishinkit.util.Log;

import org.apache.commons.lang3.builder.ToStringBuilder;

public final class AudioInfo {
Expand All @@ -17,6 +19,7 @@ public final class AudioInfo {
private int samplingRate = DEFAULT_SAMPLING_RATE;
private int minBufferSize = -1;
private AudioRecord audioRecord = null;
private int currentPresentationTimestamp = 0;

public AudioInfo() {
}
Expand Down Expand Up @@ -69,6 +72,11 @@ public final AudioRecord getAudioRecord() {
return audioRecord;
}

public long getPresentationTimestamp(long bufferSamplesNum) {
currentPresentationTimestamp += (1000 * bufferSamplesNum) / getSamplingRate();
return currentPresentationTimestamp;
}

public String toString() {
return ToStringBuilder.reflectionToString(this);
}
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/haishinkit/rtmp/RTMPMuxer.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public final void onSampleOutput(final String mime, final MediaCodec.BufferInfo
int timestamp = 0;
RTMPMessage message = null;
if (timestamps.containsKey(mime)) {
timestamp = new Double((info.presentationTimeUs - timestamps.get(mime).doubleValue())).intValue() / 1000000;
timestamp = new Double((info.presentationTimeUs - timestamps.get(mime).doubleValue())).intValue();
}
switch (mime) {
case "video/avc":
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/java/com/haishinkit/rtmp/RTMPStream.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

import com.haishinkit.util.Log;

public class RTMPStream extends EventDispatcher {

public enum HowToPublish implements IRawValue<String> {
Expand Down Expand Up @@ -162,7 +164,7 @@ public void onMarkerReached(AudioRecord audioRecord) {
public void onPeriodicNotification(AudioRecord audioRecord) {
final byte[] buffer = audio.getBuffer();
record.read(buffer, 0, frameBufferSize);
getEncoderByName("audio/mp4a-latm").encodeBytes(buffer, System.nanoTime());
getEncoderByName("audio/mp4a-latm").encodeBytes(buffer, audio.getPresentationTimestamp(frameBufferSize / 2));
}
});
record.startRecording();
Expand All @@ -175,14 +177,12 @@ public void attachCamera(final Camera camera) {
}
getEncoderByName("video/avc");
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFormat(ImageFormat.YV12);
parameters.setPreviewSize(320, 240);
parameters.setPreviewFrameRate(30);
parameters.setPreviewFormat(ImageFormat.NV21);
camera.setParameters(parameters);
camera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] bytes, Camera camera) {
getEncoderByName("video/avc").encodeBytes(bytes, System.nanoTime());
getEncoderByName("video/avc").encodeBytes(bytes, System.nanoTime() / 1000000);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,24 +49,11 @@ public ByteBuffer encode(final RTMPSocket socket) {

ByteBuffer buffer = null;
final int length = getPayload() == null ? 0 : getPayload().limit();
switch (aacPacketType) {
case 0x00:
buffer = ByteBuffer.allocate(2 + length);
buffer.put(AAC);
buffer.put(getAACPacketType());
if (0 < length) {
buffer.put(getPayload());
}
break;
case 0x01:
buffer = ByteBuffer.allocate(2 + AudioSpecificConfig.ADTS_HEADER_SIZE + length);
buffer.put(AAC);
buffer.put(getAACPacketType());
if (0 < length) {
buffer.put(config.toADTS(length));
buffer.put(getPayload());
}
break;
buffer = ByteBuffer.allocate(2 + length);
buffer.put(AAC);
buffer.put(getAACPacketType());
if (0 < length) {
buffer.put(getPayload());
}

return buffer;
Expand Down

This file was deleted.

15 changes: 0 additions & 15 deletions commons/src/test/java/com/haishinkit/commons/ExampleUnitTest.java

This file was deleted.

0 comments on commit f150716

Please sign in to comment.