Skip to content

Commit b4e82d7

Browse files
authored
DataSink, added fileDescriptor support (#88)
1 parent e10f83d commit b4e82d7

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

lib/src/main/java/com/otaliastudios/transcoder/Transcoder.java

+16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.otaliastudios.transcoder;
1717

18+
import android.os.Build;
1819
import android.os.Handler;
1920

2021
import com.otaliastudios.transcoder.engine.Engine;
@@ -24,6 +25,7 @@
2425
import com.otaliastudios.transcoder.validator.Validator;
2526
import com.otaliastudios.transcoder.internal.ValidatorException;
2627

28+
import java.io.FileDescriptor;
2729
import java.util.concurrent.Callable;
2830
import java.util.concurrent.Future;
2931
import java.util.concurrent.LinkedBlockingQueue;
@@ -33,6 +35,7 @@
3335
import java.util.concurrent.atomic.AtomicInteger;
3436

3537
import androidx.annotation.NonNull;
38+
import androidx.annotation.RequiresApi;
3639

3740
public class Transcoder {
3841
private static final String TAG = Transcoder.class.getSimpleName();
@@ -99,6 +102,19 @@ public static TranscoderOptions.Builder into(@NonNull String outPath) {
99102
return new TranscoderOptions.Builder(outPath);
100103
}
101104

105+
/**
106+
* Starts building transcoder options.
107+
* Requires a non null fileDescriptor to the output file or stream
108+
*
109+
* @param fileDescriptor descriptor of the output file or stream
110+
* @return an options builder
111+
*/
112+
@RequiresApi(api = Build.VERSION_CODES.O)
113+
@NonNull
114+
public static TranscoderOptions.Builder into(@NonNull FileDescriptor fileDescriptor) {
115+
return new TranscoderOptions.Builder(fileDescriptor);
116+
}
117+
102118
/**
103119
* Starts building transcoder options.
104120
* Requires a non null sink.

lib/src/main/java/com/otaliastudios/transcoder/TranscoderOptions.java

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.net.Uri;
5+
import android.os.Build;
56
import android.os.Handler;
67
import android.os.Looper;
78

@@ -33,6 +34,7 @@
3334

3435
import androidx.annotation.NonNull;
3536
import androidx.annotation.Nullable;
37+
import androidx.annotation.RequiresApi;
3638

3739
/**
3840
* Collects transcoding options consumed by {@link Transcoder}.
@@ -122,6 +124,11 @@ public static class Builder {
122124
this.dataSink = new DefaultDataSink(outPath);
123125
}
124126

127+
@RequiresApi(api = Build.VERSION_CODES.O)
128+
Builder(@NonNull FileDescriptor fileDescriptor) {
129+
this.dataSink = new DefaultDataSink(fileDescriptor);
130+
}
131+
125132
Builder(@NonNull DataSink dataSink) {
126133
this.dataSink = dataSink;
127134
}

lib/src/main/java/com/otaliastudios/transcoder/sink/DefaultDataSink.java

+17
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
import android.os.Build;
77

88
import androidx.annotation.NonNull;
9+
import androidx.annotation.RequiresApi;
910

1011
import com.otaliastudios.transcoder.engine.TrackStatus;
1112
import com.otaliastudios.transcoder.engine.TrackType;
1213
import com.otaliastudios.transcoder.internal.TrackTypeMap;
1314
import com.otaliastudios.transcoder.internal.Logger;
1415

16+
import java.io.FileDescriptor;
1517
import java.io.IOException;
1618
import java.nio.ByteBuffer;
1719
import java.nio.ByteOrder;
@@ -74,6 +76,21 @@ public DefaultDataSink(@NonNull String outputFilePath, int format) {
7476
}
7577
}
7678

79+
@RequiresApi(api = Build.VERSION_CODES.O)
80+
public DefaultDataSink(@NonNull FileDescriptor fileDescriptor) {
81+
this(fileDescriptor, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
82+
}
83+
84+
@RequiresApi(api = Build.VERSION_CODES.O)
85+
@SuppressWarnings("WeakerAccess")
86+
public DefaultDataSink(@NonNull FileDescriptor fileDescriptor, int format) {
87+
try {
88+
mMuxer = new MediaMuxer(fileDescriptor, format);
89+
} catch (IOException e) {
90+
throw new RuntimeException(e);
91+
}
92+
}
93+
7794
@Override
7895
public void setOrientation(int rotation) {
7996
mMuxer.setOrientationHint(rotation);

0 commit comments

Comments
 (0)