From f1507163f54b9e66299998316671fa61464224e6 Mon Sep 17 00:00:00 2001 From: shogo4405 Date: Fri, 9 Dec 2016 20:33:20 +0900 Subject: [PATCH] Success. publish an Audio. --- app/app.iml | 14 +++++------ app/src/main/AndroidManifest.xml | 8 +++---- .../java/com/haishinkit/MainActivity.java | 8 +++++++ .../haishinkit/iso/AudioSpecificConfig.java | 8 +++---- .../java/com/haishinkit/media/AudioInfo.java | 8 +++++++ .../java/com/haishinkit/rtmp/RTMPMuxer.java | 2 +- .../java/com/haishinkit/rtmp/RTMPStream.java | 10 ++++---- .../rtmp/messages/RTMPAACAudioMessage.java | 23 ++++--------------- .../haishinkit/commons/ApplicationTest.java | 13 ----------- .../haishinkit/commons/ExampleUnitTest.java | 15 ------------ 10 files changed, 42 insertions(+), 67 deletions(-) delete mode 100644 commons/src/androidTest/java/com/haishinkit/commons/ApplicationTest.java delete mode 100644 commons/src/test/java/com/haishinkit/commons/ExampleUnitTest.java diff --git a/app/app.iml b/app/app.iml index ffac49b07..7bbabf0cd 100644 --- a/app/app.iml +++ b/app/app.iml @@ -61,13 +61,6 @@ - - - - - - - @@ -75,6 +68,13 @@ + + + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 77cd29ee1..778e5980b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,9 +19,9 @@ - - - - + + + + \ No newline at end of file diff --git a/app/src/main/java/com/haishinkit/MainActivity.java b/app/src/main/java/com/haishinkit/MainActivity.java index 5810ab073..b340dc4f2 100644 --- a/app/src/main/java/com/haishinkit/MainActivity.java +++ b/app/src/main/java/com/haishinkit/MainActivity.java @@ -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; @@ -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); diff --git a/app/src/main/java/com/haishinkit/iso/AudioSpecificConfig.java b/app/src/main/java/com/haishinkit/iso/AudioSpecificConfig.java index 4ca9d5095..fbd8fe3a9 100644 --- a/app/src/main/java/com/haishinkit/iso/AudioSpecificConfig.java +++ b/app/src/main/java/com/haishinkit/iso/AudioSpecificConfig.java @@ -58,7 +58,7 @@ public static AudioObjectType rawValue(final byte rawValue) { this.rawValue = rawValue; } - public Byte rawValue() { + public final Byte rawValue() { return rawValue; } } @@ -116,7 +116,7 @@ public static SamplingFrequency rawValue(final byte rawValue) { this.rawValue = rawValue; } - public Byte rawValue() { + public final Byte rawValue() { return rawValue; } } @@ -161,7 +161,7 @@ public static ChannelConfiguration rawValue(final byte rawValue) { this.rawValue = rawValue; } - public Byte rawValue() { + public final Byte rawValue() { return rawValue; } } @@ -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; diff --git a/app/src/main/java/com/haishinkit/media/AudioInfo.java b/app/src/main/java/com/haishinkit/media/AudioInfo.java index f9fad9651..49927cd8e 100644 --- a/app/src/main/java/com/haishinkit/media/AudioInfo.java +++ b/app/src/main/java/com/haishinkit/media/AudioInfo.java @@ -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 { @@ -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() { } @@ -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); } diff --git a/app/src/main/java/com/haishinkit/rtmp/RTMPMuxer.java b/app/src/main/java/com/haishinkit/rtmp/RTMPMuxer.java index 53328526e..0ab7b5fbc 100644 --- a/app/src/main/java/com/haishinkit/rtmp/RTMPMuxer.java +++ b/app/src/main/java/com/haishinkit/rtmp/RTMPMuxer.java @@ -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": diff --git a/app/src/main/java/com/haishinkit/rtmp/RTMPStream.java b/app/src/main/java/com/haishinkit/rtmp/RTMPStream.java index 83535496c..7add0f9ca 100644 --- a/app/src/main/java/com/haishinkit/rtmp/RTMPStream.java +++ b/app/src/main/java/com/haishinkit/rtmp/RTMPStream.java @@ -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 { @@ -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(); @@ -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); } }); } diff --git a/app/src/main/java/com/haishinkit/rtmp/messages/RTMPAACAudioMessage.java b/app/src/main/java/com/haishinkit/rtmp/messages/RTMPAACAudioMessage.java index 67a9396a8..7a421b445 100644 --- a/app/src/main/java/com/haishinkit/rtmp/messages/RTMPAACAudioMessage.java +++ b/app/src/main/java/com/haishinkit/rtmp/messages/RTMPAACAudioMessage.java @@ -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; diff --git a/commons/src/androidTest/java/com/haishinkit/commons/ApplicationTest.java b/commons/src/androidTest/java/com/haishinkit/commons/ApplicationTest.java deleted file mode 100644 index 496e648f1..000000000 --- a/commons/src/androidTest/java/com/haishinkit/commons/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.haishinkit.commons; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/commons/src/test/java/com/haishinkit/commons/ExampleUnitTest.java b/commons/src/test/java/com/haishinkit/commons/ExampleUnitTest.java deleted file mode 100644 index 40d074052..000000000 --- a/commons/src/test/java/com/haishinkit/commons/ExampleUnitTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.haishinkit.commons; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file