Feat: Downloading: Add opus audio metadata tags for title, author, date, and a comment tag with the originating URL This removes the DownloadManagerService.EXTRA_SOURCE field, which is always inferred from the StreamInfo.
44 lines
1.3 KiB
Java
44 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, streamInfo);
|
|
demuxer.parseSource();
|
|
demuxer.selectTrack(0);
|
|
demuxer.build();
|
|
|
|
return OK_RESULT;
|
|
}
|
|
}
|