Search in sources :

Example 1 with MediaContainerDetectionResult

use of com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult in project lavaplayer by sedmelluq.

the class AdtsContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    AdtsStreamReader reader = new AdtsStreamReader(inputStream);
    if (reader.findPacketHeader(MediaContainerDetection.STREAM_SCAN_DISTANCE) == null) {
        return null;
    }
    log.debug("Track {} is an ADTS stream.", reference.identifier);
    return new MediaContainerDetectionResult(this, new AudioTrackInfo(reference.title != null ? reference.title : MediaContainerDetection.UNKNOWN_TITLE, MediaContainerDetection.UNKNOWN_ARTIST, Long.MAX_VALUE, reference.identifier, true, reference.identifier));
}
Also used : MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)

Example 2 with MediaContainerDetectionResult

use of com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult in project lavaplayer by sedmelluq.

the class Mp3ContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    if (!checkNextBytes(inputStream, ID3_TAG)) {
        byte[] frameHeader = new byte[4];
        Mp3FrameReader frameReader = new Mp3FrameReader(inputStream, frameHeader);
        if (!frameReader.scanForFrame(STREAM_SCAN_DISTANCE, false)) {
            return null;
        }
        inputStream.seek(0);
    }
    log.debug("Track {} is an MP3 file.", reference.identifier);
    Mp3TrackProvider file = new Mp3TrackProvider(null, inputStream);
    try {
        file.parseHeaders();
        return new MediaContainerDetectionResult(this, new AudioTrackInfo(defaultOnNull(file.getIdv3Tag(TITLE_TAG), reference.title != null ? reference.title : UNKNOWN_TITLE), defaultOnNull(file.getIdv3Tag(ARTIST_TAG), UNKNOWN_ARTIST), file.getDuration(), reference.identifier, !file.isSeekable(), reference.identifier));
    } finally {
        file.close();
    }
}
Also used : MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)

Example 3 with MediaContainerDetectionResult

use of com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult in project SkyBot by duncte123.

the class ClypitAudioSourceManager method detectContainerWithClient.

private MediaContainerDetectionResult detectContainerWithClient(HttpInterface httpInterface, AudioReference reference) throws IOException {
    try (PersistentHttpStream inputStream = new PersistentHttpStream(httpInterface, new URI(reference.identifier), Long.MAX_VALUE)) {
        int statusCode = inputStream.checkStatusCode();
        String redirectUrl = HttpClientTools.getRedirectLocation(reference.identifier, inputStream.getCurrentResponse());
        if (redirectUrl != null) {
            return new MediaContainerDetectionResult(null, new AudioReference(redirectUrl, null));
        } else if (statusCode == HttpStatus.SC_NOT_FOUND) {
            return null;
        } else if (!HttpClientTools.isSuccessWithContent(statusCode)) {
            throw new FriendlyException("That URL is not playable.", COMMON, new IllegalStateException("Status code " + statusCode));
        }
        MediaContainerHints hints = MediaContainerHints.from(getHeaderValue(inputStream.getCurrentResponse(), "Content-Type"), null);
        return MediaContainerDetection.detectContainer(reference, inputStream, hints);
    } catch (URISyntaxException e) {
        throw new FriendlyException("Not a valid URL.", COMMON, e);
    }
}
Also used : MediaContainerHints(com.sedmelluq.discord.lavaplayer.container.MediaContainerHints) MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) URISyntaxException(java.net.URISyntaxException) PersistentHttpStream(com.sedmelluq.discord.lavaplayer.tools.io.PersistentHttpStream) AudioReference(com.sedmelluq.discord.lavaplayer.track.AudioReference) URI(java.net.URI) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Example 4 with MediaContainerDetectionResult

use of com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult in project FredBoat by Frederikam.

the class HttpSourceManager method detectContainerWithClient.

private MediaContainerDetectionResult detectContainerWithClient(HttpInterface httpInterface, AudioReference reference, boolean ignoreHtml) throws IOException {
    try (PersistentHttpStream inputStream = new PersistentHttpStream(httpInterface, new URI(reference.identifier), Long.MAX_VALUE)) {
        int statusCode = inputStream.checkStatusCode();
        String redirectUrl = HttpClientTools.getRedirectLocation(reference.identifier, inputStream.getCurrentResponse());
        if (redirectUrl != null) {
            return new MediaContainerDetectionResult(null, new AudioReference(redirectUrl, null));
        } else if (statusCode == HttpStatus.SC_NOT_FOUND) {
            return null;
        } else if (!HttpClientTools.isSuccessWithContent(statusCode)) {
            throw new FriendlyException("That URL is not playable.", COMMON, new IllegalStateException("Status code " + statusCode));
        }
        MediaContainerHints hints = MediaContainerHints.from(getHeaderValue(inputStream.getCurrentResponse(), "Content-Type"), null);
        /* START CUSTOM CHANGES */
        MediaContainerDetectionResult detection = MediaContainerDetection.detectContainer(reference, inputStream, hints);
        if (!ignoreHtml && !detection.isReference() && !detection.isContainerDetected() && hints.mimeType.startsWith("text/html")) {
            return checkHtmlResponse(reference, inputStream, hints);
        }
        return detection;
    /* END CUSTOM CHANGES */
    } catch (URISyntaxException e) {
        throw new FriendlyException("Not a valid URL.", COMMON, e);
    }
}
Also used : MediaContainerHints(com.sedmelluq.discord.lavaplayer.container.MediaContainerHints) MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) URISyntaxException(java.net.URISyntaxException) PersistentHttpStream(com.sedmelluq.discord.lavaplayer.tools.io.PersistentHttpStream) AudioReference(com.sedmelluq.discord.lavaplayer.track.AudioReference) URI(java.net.URI) FriendlyException(com.sedmelluq.discord.lavaplayer.tools.FriendlyException)

Example 5 with MediaContainerDetectionResult

use of com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult in project lavaplayer by sedmelluq.

the class M3uPlaylistContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    if (!checkNextBytes(inputStream, M3U_HEADER_TAG) && !checkNextBytes(inputStream, M3U_ENTRY_TAG)) {
        return null;
    }
    log.debug("Track {} is an M3U playlist file.", reference.identifier);
    String[] lines = DataFormatTools.streamToLines(inputStream, StandardCharsets.UTF_8);
    String hlsStreamUrl = HlsStreamSegmentUrlProvider.findHlsEntryUrl(lines);
    if (hlsStreamUrl != null) {
        AudioTrackInfoBuilder infoBuilder = AudioTrackInfoBuilder.create(reference, inputStream);
        AudioReference httpReference = HttpAudioSourceManager.getAsHttpReference(reference);
        if (httpReference != null) {
            return supportedFormat(this, TYPE_HLS_OUTER, infoBuilder.setIdentifier(httpReference.identifier).build());
        } else {
            return refer(this, new AudioReference(hlsStreamUrl, infoBuilder.getTitle(), new MediaContainerDescriptor(this, TYPE_HLS_INNER)));
        }
    }
    MediaContainerDetectionResult result = loadSingleItemPlaylist(lines);
    if (result != null) {
        return result;
    }
    return unsupportedFormat(this, "The playlist file contains no links.");
}
Also used : AudioTrackInfoBuilder(com.sedmelluq.discord.lavaplayer.track.info.AudioTrackInfoBuilder) MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) AudioReference(com.sedmelluq.discord.lavaplayer.track.AudioReference) MediaContainerDescriptor(com.sedmelluq.discord.lavaplayer.container.MediaContainerDescriptor)

Aggregations

MediaContainerDetectionResult (com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult)5 AudioReference (com.sedmelluq.discord.lavaplayer.track.AudioReference)3 MediaContainerHints (com.sedmelluq.discord.lavaplayer.container.MediaContainerHints)2 FriendlyException (com.sedmelluq.discord.lavaplayer.tools.FriendlyException)2 PersistentHttpStream (com.sedmelluq.discord.lavaplayer.tools.io.PersistentHttpStream)2 AudioTrackInfo (com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)2 URI (java.net.URI)2 URISyntaxException (java.net.URISyntaxException)2 MediaContainerDescriptor (com.sedmelluq.discord.lavaplayer.container.MediaContainerDescriptor)1 AudioTrackInfoBuilder (com.sedmelluq.discord.lavaplayer.track.info.AudioTrackInfoBuilder)1