Skip to content

Commit 31e4313

Browse files
committed
update gradle;add more param to StremPublisher.Param
1 parent 9a34d4b commit 31e4313

File tree

17 files changed

+234
-78
lines changed

17 files changed

+234
-78
lines changed

app/build.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
apply plugin: 'com.android.application'
2222

2323
android {
24-
compileSdkVersion 25
25-
buildToolsVersion "25.0.2"
24+
compileSdkVersion 27
25+
buildToolsVersion "27.0.2"
2626
defaultConfig {
2727
applicationId "com.chillingvan.instantvideo.sample"
2828
minSdkVersion 18
29-
targetSdkVersion 25
29+
targetSdkVersion 27
3030
versionCode 1
3131
versionName "1.0"
3232
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -50,8 +50,8 @@ dependencies {
5050
exclude group: 'com.android.support', module: 'support-annotations'
5151
})
5252
compile project(':applibs')
53-
compile 'com.github.tajchert:nammu:1.1.1'
54-
compile 'com.android.support:appcompat-v7:25.2.0'
53+
compile 'com.github.tajchert:nammu:1.2.0'
54+
compile 'com.android.support:appcompat-v7:27.0.2'
5555
compile 'com.android.support.constraint:constraint-layout:1.0.2'
5656
testCompile 'junit:junit:4.12'
5757
}

app/src/main/java/com/chillingvan/instantvideo/sample/test/audio/TestAudioEncoder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.chillingvan.canvasgl.Loggers;
2727
import com.chillingvan.lib.encoder.MediaCodecInputStream;
2828
import com.chillingvan.lib.encoder.audio.AACEncoder;
29+
import com.chillingvan.lib.publisher.StreamPublisher;
2930

3031
import java.io.File;
3132
import java.io.FileNotFoundException;
@@ -56,7 +57,8 @@ public TestAudioEncoder(Context ctx) {
5657

5758
public void prepareEncoder() {
5859
try {
59-
aacEncoder = new AACEncoder(44100, 192000);
60+
StreamPublisher.StreamPublisherParam streamPublisherParam = new StreamPublisher.StreamPublisherParam();
61+
aacEncoder = new AACEncoder(streamPublisherParam);
6062
aacEncoder.setOnDataComingCallback(new AACEncoder.OnDataComingCallback() {
6163
@Override
6264
public void onComing() {

app/src/main/java/com/chillingvan/instantvideo/sample/test/camera/TestCameraAndVideoActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
import com.chillingvan.lib.camera.InstantVideoCamera;
2424
import com.chillingvan.lib.encoder.video.H264Encoder;
2525

26+
/**
27+
* Data Stream:
28+
* Camera -> SurfaceTexture -> Surface -> MediaCodec -> encode data(byte[]) -> File
29+
*/
2630
public class TestCameraAndVideoActivity extends AppCompatActivity {
2731

2832
private TestVideoEncoder testVideoEncoder;

app/src/main/java/com/chillingvan/instantvideo/sample/test/publisher/TestCameraPublisherActivity.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public void onGLDraw(ICanvasGL canvasGL, SurfaceTexture surfaceTexture, RawTextu
7070
}
7171
});
7272
addrEditText = (EditText) findViewById(R.id.ip_input_test);
73+
74+
7375
instantVideoCamera = new InstantVideoCamera(Camera.CameraInfo.CAMERA_FACING_FRONT, 640, 480);
7476
// instantVideoCamera = new InstantVideoCamera(Camera.CameraInfo.CAMERA_FACING_FRONT, 1280, 720);
7577

@@ -82,6 +84,8 @@ public void handleMessage(Message msg) {
8284
// StreamPublisher.StreamPublisherParam streamPublisherParam = new StreamPublisher.StreamPublisherParam();
8385
// StreamPublisher.StreamPublisherParam streamPublisherParam = new StreamPublisher.StreamPublisherParam(1080, 640, 9500 * 1000, 30, 1, 44100, 19200);
8486
StreamPublisher.StreamPublisherParam streamPublisherParam = new StreamPublisher.StreamPublisherParam(540, 750, 1500 * 1000, 30, 1, 44100, 19200);
87+
streamPublisherParam.outputFilePath = getExternalFilesDir(null) + "/test_flv_encode.flv";
88+
// streamPublisherParam.outputFilePath = getExternalFilesDir(null) + "/test_mp4_encode.mp4";
8589
streamPublisher.prepareEncoder(streamPublisherParam, new H264Encoder.OnDrawListener() {
8690
@Override
8791
public void onGLDraw(ICanvasGL canvasGL, SurfaceTexture surfaceTexture, RawTexture rawTexture, @Nullable SurfaceTexture outsideSurfaceTexture, @Nullable BasicTexture outsideTexture) {
@@ -91,16 +95,17 @@ public void onGLDraw(ICanvasGL canvasGL, SurfaceTexture surfaceTexture, RawTextu
9195
}
9296
});
9397
try {
94-
streamPublisher.startPublish(addrEditText.getText().toString(), streamPublisherParam.width, streamPublisherParam.height);
98+
streamPublisherParam.outputUrl = addrEditText.getText().toString();
99+
streamPublisher.startPublish();
95100
} catch (IOException e) {
96101
e.printStackTrace();
102+
((TextView)findViewById(R.id.test_camera_button)).setText("START");
97103
}
98104
}
99105
};
100106

101-
// streamPublisher = new CameraStreamPublisher(new RTMPStreamMuxer(), cameraPreviewTextureView, instantVideoCamera);
102-
String filename = getExternalFilesDir(null) + "/test_flv_encode.flv";
103-
streamPublisher = new CameraStreamPublisher(new RTMPStreamMuxer(filename), cameraPreviewTextureView, instantVideoCamera);
107+
streamPublisher = new CameraStreamPublisher(new RTMPStreamMuxer(), cameraPreviewTextureView, instantVideoCamera);
108+
// streamPublisher = new CameraStreamPublisher(new MP4Muxer(), cameraPreviewTextureView, instantVideoCamera);
104109
}
105110

106111
private void drawVideoFrame(ICanvasGL canvasGL, @Nullable SurfaceTexture outsideSurfaceTexture, @Nullable BasicTexture outsideTexture) {

app/src/main/java/com/chillingvan/instantvideo/sample/test/video/TestVideoEncoder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.chillingvan.canvasgl.glview.texture.gles.EglContextWrapper;
3535
import com.chillingvan.lib.encoder.MediaCodecInputStream;
3636
import com.chillingvan.lib.encoder.video.H264Encoder;
37+
import com.chillingvan.lib.publisher.StreamPublisher;
3738

3839
import java.io.File;
3940
import java.io.FileNotFoundException;
@@ -69,7 +70,7 @@ public TestVideoEncoder(Context ctx, final EglContextWrapper eglCtx) {
6970

7071
public void prepareEncoder(H264Encoder.OnDrawListener onDrawListener) {
7172
try {
72-
h264Encoder = new H264Encoder(640, 480, 2949120, 30, 5, eglCtx);
73+
h264Encoder = new H264Encoder(new StreamPublisher.StreamPublisherParam(), eglCtx);
7374
h264Encoder.setSharedTexture(outsideTexture, outsideSurfaceTexture);
7475
h264Encoder.setOnDrawListener(onDrawListener);
7576
} catch (IOException | IllegalStateException e) {

app/src/main/res/layout/activity_test_camera_publisher.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
android:id="@+id/ip_input_test"
6464
android:layout_width="0dp"
6565
android:layout_height="wrap_content"
66-
android:text="rtmp://192.168.137.1:19305/live/room"
66+
android:text="rtmp://192.168.0.101:19305/live/room"
6767
android:hint="rtmp://192.168.1.139:19305/live/room"
6868
android:layout_marginEnd="8dp"
6969
android:layout_marginLeft="8dp"

applibs/build.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ apply plugin: 'com.github.dcendents.android-maven'
2323
group='com.github.ChillingVan'
2424

2525
android {
26-
compileSdkVersion 25
27-
buildToolsVersion "25.0.2"
26+
compileSdkVersion 27
27+
buildToolsVersion "26.0.2"
2828

2929
defaultConfig {
3030
minSdkVersion 18
31-
targetSdkVersion 25
31+
targetSdkVersion 27
3232
versionCode 100010
3333
versionName "1.0.1.0"
3434

@@ -45,14 +45,14 @@ android {
4545

4646
dependencies {
4747
compile fileTree(dir: 'libs', include: ['*.jar'])
48-
compile 'com.github.ChillingVan:android-openGL-canvas:v1.2.1.2'
48+
compile 'com.github.ChillingVan:android-openGL-canvas:v1.2.2.1'
4949
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
5050
exclude group: 'com.android.support', module: 'support-annotations'
5151
})
52-
compile 'com.android.support:appcompat-v7:25.2.0'
5352
testCompile 'junit:junit:4.12'
5453
compile 'net.butterflytv.utils:rtmp-client:0.2.6'
5554

55+
compile 'com.android.support:support-annotations:27.0.2'
5656
}
5757

5858

applibs/src/main/java/com/chillingvan/lib/encoder/audio/AACEncoder.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@
2323
import android.media.AudioFormat;
2424
import android.media.AudioRecord;
2525
import android.media.MediaCodec;
26-
import android.media.MediaCodecInfo;
27-
import android.media.MediaFormat;
2826
import android.media.MediaRecorder;
2927
import android.util.Log;
3028

3129
import com.chillingvan.canvasgl.Loggers;
3230
import com.chillingvan.lib.encoder.MediaCodecInputStream;
31+
import com.chillingvan.lib.publisher.StreamPublisher;
3332

3433
import java.io.IOException;
3534
import java.nio.ByteBuffer;
3635

3736
/**
38-
* Created by Chilling on 2017/1/11.
37+
* Data Stream:
38+
* MIC -> AudioRecord -> voice data(byte[]) -> MediaCodec -> encode data(byte[])
3939
*/
4040

4141
public class AACEncoder {
@@ -51,16 +51,12 @@ public class AACEncoder {
5151
private final int bufferSize;
5252
private boolean isStart;
5353

54-
public AACEncoder(final int samplingRate, int bitRate) throws IOException {
55-
this.samplingRate = samplingRate;
54+
public AACEncoder(StreamPublisher.StreamPublisherParam params) throws IOException {
55+
this.samplingRate = params.samplingRate;
5656

57-
bufferSize = AudioRecord.getMinBufferSize(samplingRate, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 2;
58-
mMediaCodec = MediaCodec.createEncoderByType("audio/mp4a-latm");
59-
MediaFormat format = MediaFormat.createAudioFormat("audio/mp4a-latm", samplingRate, 2);
60-
format.setInteger(MediaFormat.KEY_BIT_RATE, bitRate);
61-
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
62-
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, bufferSize);
63-
mMediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
57+
bufferSize = params.audioBufferSize;
58+
mMediaCodec = MediaCodec.createEncoderByType(params.audioMIME);
59+
mMediaCodec.configure(params.createAudioMediaFormat(), null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
6460

6561
mediaCodecInputStream = new MediaCodecInputStream(mMediaCodec);
6662
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, samplingRate, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);

applibs/src/main/java/com/chillingvan/lib/encoder/video/H264Encoder.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,16 @@
3434
import com.chillingvan.canvasgl.glcanvas.RawTexture;
3535
import com.chillingvan.canvasgl.glview.texture.gles.EglContextWrapper;
3636
import com.chillingvan.lib.encoder.MediaCodecInputStream;
37+
import com.chillingvan.lib.publisher.StreamPublisher;
3738

3839
import java.io.IOException;
3940

4041
/**
41-
* Created by Chilling on 2016/12/11.
42+
* Data Stream:
43+
*
44+
* The texture of {@link H264Encoder#setSharedTexture} -> Surface of MediaCodec -> encode data(byte[])
45+
*
4246
*/
43-
4447
public class H264Encoder {
4548

4649
private final Surface mInputSurface;
@@ -55,39 +58,33 @@ public class H264Encoder {
5558
private boolean isStart;
5659

5760

58-
public H264Encoder(int width, int height, int bitRate, int frameRate, int iframeInterval) throws IOException {
59-
this(width, height, bitRate, frameRate, iframeInterval, EglContextWrapper.EGL_NO_CONTEXT_WRAPPER);
61+
public H264Encoder(StreamPublisher.StreamPublisherParam params) throws IOException {
62+
this(params, EglContextWrapper.EGL_NO_CONTEXT_WRAPPER);
6063
}
6164

6265

6366
/**
6467
*
65-
* @param width width
66-
* @param height height
67-
* @param bitRate bitRate
68-
* @param frameRate frameRate
69-
* @param iframeInterval iframeInterval
7068
* @param eglCtx can be EGL10.EGL_NO_CONTEXT or outside context
71-
* @throws IOException
7269
*/
73-
public H264Encoder(int width, int height, int bitRate, int frameRate, int iframeInterval, final EglContextWrapper eglCtx) throws IOException {
70+
public H264Encoder(StreamPublisher.StreamPublisherParam params, final EglContextWrapper eglCtx) throws IOException {
7471

75-
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, width, height);
72+
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, params.width, params.height);
7673

7774
// Set some properties. Failing to specify some of these can cause the MediaCodec
7875
// configure() call to throw an unhelpful exception.
7976
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
8077
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
81-
format.setInteger(MediaFormat.KEY_BIT_RATE, bitRate);
82-
format.setInteger(MediaFormat.KEY_FRAME_RATE, frameRate);
83-
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, iframeInterval);
78+
format.setInteger(MediaFormat.KEY_BIT_RATE, params.videoBitRate);
79+
format.setInteger(MediaFormat.KEY_FRAME_RATE, params.frameRate);
80+
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, params.iframeInterval);
8481
mEncoder = MediaCodec.createEncoderByType(MIME_TYPE);
8582
mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
8683
mInputSurface = mEncoder.createInputSurface();
8784
mEncoder.start();
8885
mediaCodecInputStream = new MediaCodecInputStream(mEncoder);
8986

90-
offScreenCanvas = new EncoderCanvas(width, height, eglCtx);
87+
offScreenCanvas = new EncoderCanvas(params.width, params.height, eglCtx);
9188
}
9289

9390
/**

applibs/src/main/java/com/chillingvan/lib/encoder/audio/packetlizer/AACADTSPaketLizer.java renamed to applibs/src/main/java/com/chillingvan/lib/muxer/FrameSender.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,25 @@
1818
*
1919
*/
2020

21-
package com.chillingvan.lib.encoder.audio.packetlizer;
21+
package com.chillingvan.lib.muxer;
22+
23+
import android.os.Handler;
24+
25+
import java.util.LinkedList;
26+
import java.util.List;
2227

2328
/**
24-
* Created by Chilling on 2017/2/4.
29+
* Created by Chilling on 2017/12/17.
2530
*/
2631

27-
public class AACADTSPaketLizer {
32+
public class FrameSender {
33+
34+
public static final int KEEP_COUNT = 30;
35+
36+
private Handler sendHandler;
37+
private List<FramePool.Frame> frameQueue = new LinkedList<>();
38+
private FramePool framePool = new FramePool(KEEP_COUNT + 10);
39+
40+
public FrameSender() {
41+
}
2842
}

0 commit comments

Comments
 (0)