mirror of https://github.com/TeamNewPipe/NewPipe
45 lines
1.3 KiB
Java
45 lines
1.3 KiB
Java
package us.shandian.giga.postprocessing;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import org.schabi.newpipe.streams.OggFromWebMWriter;
|
|
import org.schabi.newpipe.streams.io.SharpStream;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.ByteBuffer;
|
|
|
|
class OggFromWebmDemuxer extends Postprocessing {
|
|
|
|
OggFromWebmDemuxer() {
|
|
super(true, true, ALGORITHM_OGG_FROM_WEBM_DEMUXER);
|
|
}
|
|
|
|
@Override
|
|
boolean test(SharpStream... sources) throws IOException {
|
|
ByteBuffer buffer = ByteBuffer.allocate(4);
|
|
sources[0].read(buffer.array());
|
|
|
|
// youtube uses WebM as container, but the file extension (format suffix) is "*.opus"
|
|
// check if the file is a webm/mkv file before proceed
|
|
|
|
switch (buffer.getInt()) {
|
|
case 0x1a45dfa3:
|
|
return true;// webm/mkv
|
|
case 0x4F676753:
|
|
return false;// ogg
|
|
}
|
|
|
|
throw new UnsupportedOperationException("file not recognized, failed to demux the audio stream");
|
|
}
|
|
|
|
@Override
|
|
int process(SharpStream out, @NonNull SharpStream... sources) throws IOException {
|
|
OggFromWebMWriter demuxer = new OggFromWebMWriter(sources[0], out);
|
|
demuxer.parseSource();
|
|
demuxer.selectTrack(0);
|
|
demuxer.build();
|
|
|
|
return OK_RESULT;
|
|
}
|
|
}
|