Added VideoQualityData
This commit is contained in:
parent
73bd33d889
commit
d0bae9e2a1
|
@ -22,6 +22,7 @@ import org.schabi.newpipe.extractor.streamdata.format.registry.AudioFormatRegist
|
|||
import org.schabi.newpipe.extractor.streamdata.format.registry.VideoAudioFormatRegistry;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.VideoAudioStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.quality.VideoQualityData;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleAudioStreamImpl;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleVideoAudioStreamImpl;
|
||||
|
||||
|
@ -201,7 +202,10 @@ public class MediaCCCLiveStreamExtractor extends StreamExtractor {
|
|||
deliveryData,
|
||||
// TODO: This looks wrong
|
||||
new VideoAudioFormatRegistry().getFromSuffix(dto.getUrlKey()),
|
||||
videoSize.getInt(0) + "x" + videoSize.getInt(1)
|
||||
new VideoQualityData(
|
||||
/*height=*/videoSize.getInt(1, VideoQualityData.UNKNOWN),
|
||||
/*width=*/videoSize.getInt(0, VideoQualityData.UNKNOWN),
|
||||
VideoQualityData.UNKNOWN)
|
||||
);
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.schabi.newpipe.extractor.streamdata.format.registry.AudioFormatRegist
|
|||
import org.schabi.newpipe.extractor.streamdata.format.registry.VideoAudioFormatRegistry;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.VideoAudioStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.quality.VideoQualityData;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleAudioStreamImpl;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleVideoAudioStreamImpl;
|
||||
import org.schabi.newpipe.extractor.utils.JsonUtils;
|
||||
|
@ -112,7 +113,11 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
null,
|
||||
AudioStream.UNKNOWN_BITRATE,
|
||||
new VideoAudioFormatRegistry().getFromMimeType(o.getString("mime_type")),
|
||||
o.getInt("height") + "p"
|
||||
new VideoQualityData(
|
||||
o.getInt("height", VideoQualityData.UNKNOWN),
|
||||
o.getInt("width", VideoQualityData.UNKNOWN),
|
||||
VideoQualityData.UNKNOWN
|
||||
)
|
||||
))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
@ -139,8 +144,7 @@ public class MediaCCCStreamExtractor extends StreamExtractor {
|
|||
conferenceData = JsonParser.object()
|
||||
.from(downloader.get(data.getString("conference_url")).responseBody());
|
||||
} catch (final JsonParserException jpe) {
|
||||
throw new ExtractionException("Could not parse json returned by URL: " + videoUrl,
|
||||
jpe);
|
||||
throw new ExtractionException("Could not parse json returned by URL: " + videoUrl, jpe);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.schabi.newpipe.extractor.streamdata.stream.AudioStream;
|
|||
import org.schabi.newpipe.extractor.streamdata.stream.Stream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.SubtitleStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.VideoAudioStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.quality.VideoQualityData;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleAudioStreamImpl;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleSubtitleStreamImpl;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.simpleimpl.SimpleVideoAudioStreamImpl;
|
||||
|
@ -465,6 +466,7 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
.stream()
|
||||
.filter(JsonObject.class::isInstance)
|
||||
.map(JsonObject.class::cast)
|
||||
// TODO Check! This is the master playlist!
|
||||
.map(stream -> new SimpleVideoAudioStreamImpl(
|
||||
new SimpleHLSDeliveryDataImpl(stream.getString(PLAYLIST_URL, "")),
|
||||
VideoAudioFormatRegistry.MPEG_4)
|
||||
|
@ -489,9 +491,10 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
.map(JsonObject.class::cast)
|
||||
.filter(stream -> !isNullOrEmpty(getUrlFromStream(stream)))
|
||||
.forEach(stream -> {
|
||||
final String resolution = getResolutionFromStream(stream);
|
||||
|
||||
if (resolution.toLowerCase().contains("audio")) {
|
||||
final JsonObject resJson = stream.getObject("resolution");
|
||||
if (resJson.getString("label", "")
|
||||
.toLowerCase()
|
||||
.contains("audio")) {
|
||||
// An audio stream
|
||||
addNewStreams(
|
||||
this.audioStreams,
|
||||
|
@ -514,17 +517,15 @@ public class PeertubeStreamExtractor extends StreamExtractor {
|
|||
dd,
|
||||
new VideoAudioFormatRegistry()
|
||||
.getFromSuffix(getExtensionFromStream(s)),
|
||||
resolution
|
||||
new VideoQualityData(
|
||||
resJson.getInt("id", VideoQualityData.UNKNOWN),
|
||||
stream.getInt("fps", VideoQualityData.UNKNOWN))
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static String getResolutionFromStream(@Nonnull final JsonObject stream) {
|
||||
return stream.getObject("resolution")
|
||||
.getString("label");
|
||||
}
|
||||
|
||||
private static String getStreamUrlKeyFromStream(@Nonnull final JsonObject stream) {
|
||||
return stream.has(FILE_URL) ? FILE_URL : FILE_DOWNLOAD_URL;
|
||||
|
|
|
@ -1,29 +1,23 @@
|
|||
package org.schabi.newpipe.extractor.streamdata.stream;
|
||||
|
||||
import org.schabi.newpipe.extractor.streamdata.format.VideoAudioMediaFormat;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.quality.VideoQualityData;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* Represents a video (only) stream.
|
||||
*/
|
||||
public interface VideoStream extends Stream {
|
||||
String UNKNOWN_RESOLUTION = "";
|
||||
|
||||
// TODO: Check if this can be non-null
|
||||
@Nullable
|
||||
default VideoAudioMediaFormat videoMediaFormat() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// TODO: This should be a separate entity (containing e.g. height x width + fps)
|
||||
@Nonnull
|
||||
default String resolution() {
|
||||
return UNKNOWN_RESOLUTION;
|
||||
}
|
||||
VideoQualityData videoQualityData();
|
||||
|
||||
@Override
|
||||
default boolean equalsStream(@Nullable final Stream other) {
|
||||
|
@ -33,6 +27,6 @@ public interface VideoStream extends Stream {
|
|||
|
||||
final VideoStream otherVideoStream = (VideoStream) other;
|
||||
return Objects.equals(videoMediaFormat(), otherVideoStream.videoMediaFormat())
|
||||
&& Objects.equals(resolution(), otherVideoStream.resolution());
|
||||
&& videoQualityData().equalsVideoQualityData(otherVideoStream.videoQualityData());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
package org.schabi.newpipe.extractor.streamdata.stream.quality;
|
||||
|
||||
public class VideoQualityData {
|
||||
public static int UNKNOWN = -1;
|
||||
|
||||
private final int height;
|
||||
private final int width;
|
||||
private final int fps;
|
||||
|
||||
public VideoQualityData(final int height, final int width, final int fps) {
|
||||
this.height = height;
|
||||
this.width = width;
|
||||
this.fps = fps;
|
||||
}
|
||||
|
||||
public VideoQualityData(final int height, final int fps) {
|
||||
this(height, UNKNOWN, fps);
|
||||
}
|
||||
|
||||
public VideoQualityData(final int height) {
|
||||
this(height, UNKNOWN);
|
||||
}
|
||||
|
||||
public VideoQualityData() {
|
||||
this(UNKNOWN);
|
||||
}
|
||||
|
||||
|
||||
public int height() {
|
||||
return height;
|
||||
}
|
||||
|
||||
public int width() {
|
||||
return width;
|
||||
}
|
||||
|
||||
public int fps() {
|
||||
return fps;
|
||||
}
|
||||
|
||||
public boolean equalsVideoQualityData(final VideoQualityData other) {
|
||||
return height() == other.height()
|
||||
&& width() == other.width()
|
||||
&& fps() == other.fps();
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ import org.schabi.newpipe.extractor.streamdata.delivery.DeliveryData;
|
|||
import org.schabi.newpipe.extractor.streamdata.format.AudioMediaFormat;
|
||||
import org.schabi.newpipe.extractor.streamdata.format.VideoAudioMediaFormat;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.VideoAudioStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.quality.VideoQualityData;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
@ -18,35 +19,35 @@ public class SimpleVideoAudioStreamImpl extends AbstractStreamImpl implements Vi
|
|||
@Nullable
|
||||
private final VideoAudioMediaFormat videoAudioMediaFormat;
|
||||
@Nonnull
|
||||
private final String resolution;
|
||||
private final VideoQualityData videoQualityData;
|
||||
|
||||
public SimpleVideoAudioStreamImpl(
|
||||
@Nonnull final DeliveryData deliveryData,
|
||||
@Nullable final AudioMediaFormat audioMediaFormat,
|
||||
final int averageBitrate,
|
||||
@Nullable final VideoAudioMediaFormat videoAudioMediaFormat,
|
||||
@Nonnull final String resolution
|
||||
@Nonnull final VideoQualityData videoQualityData
|
||||
) {
|
||||
super(deliveryData);
|
||||
this.audioMediaFormat = audioMediaFormat;
|
||||
this.averageBitrate = averageBitrate;
|
||||
this.videoAudioMediaFormat = videoAudioMediaFormat;
|
||||
this.resolution = Objects.requireNonNull(resolution);
|
||||
this.videoQualityData = Objects.requireNonNull(videoQualityData);
|
||||
}
|
||||
|
||||
public SimpleVideoAudioStreamImpl(
|
||||
@Nonnull final DeliveryData deliveryData,
|
||||
@Nullable final VideoAudioMediaFormat videoAudioMediaFormat,
|
||||
@Nonnull final String resolution
|
||||
@Nonnull final VideoQualityData videoQualityData
|
||||
) {
|
||||
this(deliveryData, null, UNKNOWN_BITRATE, videoAudioMediaFormat, resolution);
|
||||
this(deliveryData, null, UNKNOWN_BITRATE, videoAudioMediaFormat, videoQualityData);
|
||||
}
|
||||
|
||||
public SimpleVideoAudioStreamImpl(
|
||||
@Nonnull final DeliveryData deliveryData,
|
||||
@Nullable final VideoAudioMediaFormat videoAudioMediaFormat
|
||||
) {
|
||||
this(deliveryData, videoAudioMediaFormat, UNKNOWN_RESOLUTION);
|
||||
this(deliveryData, videoAudioMediaFormat, new VideoQualityData());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -68,7 +69,7 @@ public class SimpleVideoAudioStreamImpl extends AbstractStreamImpl implements Vi
|
|||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String resolution() {
|
||||
return resolution;
|
||||
public VideoQualityData videoQualityData() {
|
||||
return videoQualityData;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.schabi.newpipe.extractor.streamdata.stream.simpleimpl;
|
|||
import org.schabi.newpipe.extractor.streamdata.delivery.DeliveryData;
|
||||
import org.schabi.newpipe.extractor.streamdata.format.VideoAudioMediaFormat;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.VideoStream;
|
||||
import org.schabi.newpipe.extractor.streamdata.stream.quality.VideoQualityData;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
@ -13,27 +14,27 @@ public class SimpleVideoStreamImpl extends AbstractStreamImpl implements VideoSt
|
|||
@Nullable
|
||||
private final VideoAudioMediaFormat videoAudioMediaFormat;
|
||||
@Nonnull
|
||||
private final String resolution;
|
||||
private final VideoQualityData videoQualityData;
|
||||
|
||||
public SimpleVideoStreamImpl(
|
||||
@Nonnull final DeliveryData deliveryData,
|
||||
@Nullable final VideoAudioMediaFormat videoAudioMediaFormat,
|
||||
@Nonnull final String resolution
|
||||
@Nonnull final VideoQualityData videoQualityData
|
||||
) {
|
||||
super(deliveryData);
|
||||
this.videoAudioMediaFormat = videoAudioMediaFormat;
|
||||
this.resolution = Objects.requireNonNull(resolution);
|
||||
this.videoQualityData = Objects.requireNonNull(videoQualityData);
|
||||
}
|
||||
|
||||
public SimpleVideoStreamImpl(
|
||||
@Nonnull final DeliveryData deliveryData,
|
||||
@Nonnull final String resolution
|
||||
@Nonnull final VideoQualityData videoQualityData
|
||||
) {
|
||||
this(deliveryData, null, resolution);
|
||||
this(deliveryData, null, videoQualityData);
|
||||
}
|
||||
|
||||
public SimpleVideoStreamImpl(@Nonnull final DeliveryData deliveryData) {
|
||||
this(deliveryData, null, UNKNOWN_RESOLUTION);
|
||||
this(deliveryData, new VideoQualityData());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -44,7 +45,7 @@ public class SimpleVideoStreamImpl extends AbstractStreamImpl implements VideoSt
|
|||
|
||||
@Nonnull
|
||||
@Override
|
||||
public String resolution() {
|
||||
return resolution;
|
||||
public VideoQualityData videoQualityData() {
|
||||
return videoQualityData;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue