mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-08-03 14:50:49 +00:00
Logging and refs
This commit is contained in:
parent
36b53d490f
commit
05ed1e188e
9 changed files with 33 additions and 10 deletions
|
@ -127,7 +127,7 @@ class VideoHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
@OptIn(UnstableApi::class)
|
||||||
fun convertItagSourceToChunkedDashSource(videoSource: JSVideoUrlRangeSource) : MediaSource {
|
fun convertItagSourceToChunkedDashSource(videoSource: JSVideoUrlRangeSource) : Pair<MediaSource, String> {
|
||||||
val urlToUse = videoSource.getVideoUrl();
|
val urlToUse = videoSource.getVideoUrl();
|
||||||
val manifestConfig = ProgressiveDashManifestCreator.fromVideoProgressiveStreamingUrl(urlToUse,
|
val manifestConfig = ProgressiveDashManifestCreator.fromVideoProgressiveStreamingUrl(urlToUse,
|
||||||
videoSource.duration * 1000,
|
videoSource.duration * 1000,
|
||||||
|
@ -145,10 +145,10 @@ class VideoHelper {
|
||||||
);
|
);
|
||||||
|
|
||||||
val manifest = DashManifestParser().parse(Uri.parse(""), manifestConfig.byteInputStream());
|
val manifest = DashManifestParser().parse(Uri.parse(""), manifestConfig.byteInputStream());
|
||||||
return DashMediaSource.Factory(ResolvingDataSource.Factory(videoSource.getHttpDataSourceFactory(), ResolvingDataSource.Resolver { dataSpec ->
|
return Pair(DashMediaSource.Factory(ResolvingDataSource.Factory(videoSource.getHttpDataSourceFactory(), ResolvingDataSource.Resolver { dataSpec ->
|
||||||
Logger.v("PLAYBACK", "Video REQ Range [" + dataSpec.position + "-" + (dataSpec.position + dataSpec.length) + "](" + dataSpec.length + ")", null);
|
Logger.v("PLAYBACK", "Video REQ Range [" + dataSpec.position + "-" + (dataSpec.position + dataSpec.length) + "](" + dataSpec.length + ")", null);
|
||||||
return@Resolver dataSpec;
|
return@Resolver dataSpec;
|
||||||
})).createMediaSource(manifest, MediaItem.Builder().setUri(Uri.parse(videoSource.getVideoUrl())).build())
|
})).createMediaSource(manifest, MediaItem.Builder().setUri(Uri.parse(videoSource.getVideoUrl())).build()), manifestConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getMediaMetadata(media: IPlatformVideoDetails): MediaMetadata {
|
fun getMediaMetadata(media: IPlatformVideoDetails): MediaMetadata {
|
||||||
|
|
|
@ -14,6 +14,7 @@ import androidx.media3.common.text.CueGroup
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
import androidx.media3.datasource.DefaultDataSource
|
import androidx.media3.datasource.DefaultDataSource
|
||||||
import androidx.media3.datasource.DefaultHttpDataSource
|
import androidx.media3.datasource.DefaultHttpDataSource
|
||||||
|
import androidx.media3.datasource.HttpDataSource
|
||||||
import androidx.media3.exoplayer.ExoPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
import androidx.media3.exoplayer.dash.DashMediaSource
|
import androidx.media3.exoplayer.dash.DashMediaSource
|
||||||
import androidx.media3.exoplayer.drm.DefaultDrmSessionManagerProvider
|
import androidx.media3.exoplayer.drm.DefaultDrmSessionManagerProvider
|
||||||
|
@ -26,6 +27,7 @@ import androidx.media3.exoplayer.trackselection.DefaultTrackSelector
|
||||||
import com.futo.platformplayer.Settings
|
import com.futo.platformplayer.Settings
|
||||||
import com.futo.platformplayer.api.media.models.chapters.IChapter
|
import com.futo.platformplayer.api.media.models.chapters.IChapter
|
||||||
import com.futo.platformplayer.api.media.models.streams.VideoMuxedSourceDescriptor
|
import com.futo.platformplayer.api.media.models.streams.VideoMuxedSourceDescriptor
|
||||||
|
import com.futo.platformplayer.api.media.models.streams.sources.AudioUrlSource
|
||||||
import com.futo.platformplayer.api.media.models.streams.sources.IAudioSource
|
import com.futo.platformplayer.api.media.models.streams.sources.IAudioSource
|
||||||
import com.futo.platformplayer.api.media.models.streams.sources.IAudioUrlSource
|
import com.futo.platformplayer.api.media.models.streams.sources.IAudioUrlSource
|
||||||
import com.futo.platformplayer.api.media.models.streams.sources.IAudioUrlWidevineSource
|
import com.futo.platformplayer.api.media.models.streams.sources.IAudioUrlWidevineSource
|
||||||
|
@ -36,17 +38,21 @@ import com.futo.platformplayer.api.media.models.streams.sources.IVideoSource
|
||||||
import com.futo.platformplayer.api.media.models.streams.sources.IVideoUrlSource
|
import com.futo.platformplayer.api.media.models.streams.sources.IVideoUrlSource
|
||||||
import com.futo.platformplayer.api.media.models.streams.sources.LocalAudioSource
|
import com.futo.platformplayer.api.media.models.streams.sources.LocalAudioSource
|
||||||
import com.futo.platformplayer.api.media.models.streams.sources.LocalVideoSource
|
import com.futo.platformplayer.api.media.models.streams.sources.LocalVideoSource
|
||||||
|
import com.futo.platformplayer.api.media.models.streams.sources.VideoUrlSource
|
||||||
import com.futo.platformplayer.api.media.models.subtitles.ISubtitleSource
|
import com.futo.platformplayer.api.media.models.subtitles.ISubtitleSource
|
||||||
import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails
|
import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSAudioUrlRangeSource
|
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSAudioUrlRangeSource
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSHLSManifestAudioSource
|
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSHLSManifestAudioSource
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSSource
|
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSSource
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSVideoUrlRangeSource
|
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSVideoUrlRangeSource
|
||||||
|
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSVideoUrlSource
|
||||||
import com.futo.platformplayer.constructs.Event1
|
import com.futo.platformplayer.constructs.Event1
|
||||||
|
import com.futo.platformplayer.engine.dev.V8RemoteObject
|
||||||
import com.futo.platformplayer.helpers.VideoHelper
|
import com.futo.platformplayer.helpers.VideoHelper
|
||||||
import com.futo.platformplayer.logging.Logger
|
import com.futo.platformplayer.logging.Logger
|
||||||
import com.futo.platformplayer.states.StateApp
|
import com.futo.platformplayer.states.StateApp
|
||||||
import com.futo.platformplayer.video.PlayerManager
|
import com.futo.platformplayer.video.PlayerManager
|
||||||
|
import com.google.gson.Gson
|
||||||
import getHttpDataSourceFactory
|
import getHttpDataSourceFactory
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -68,6 +74,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||||
private set;
|
private set;
|
||||||
|
|
||||||
private var _lastVideoMediaSource: MediaSource? = null;
|
private var _lastVideoMediaSource: MediaSource? = null;
|
||||||
|
private var _lastGeneratedDash: String? = null;
|
||||||
private var _lastAudioMediaSource: MediaSource? = null;
|
private var _lastAudioMediaSource: MediaSource? = null;
|
||||||
private var _lastSubtitleMediaSource: MediaSource? = null;
|
private var _lastSubtitleMediaSource: MediaSource? = null;
|
||||||
private var _shouldPlaybackRestartOnConnectivity: Boolean = false;
|
private var _shouldPlaybackRestartOnConnectivity: Boolean = false;
|
||||||
|
@ -375,6 +382,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||||
|
|
||||||
|
|
||||||
private fun swapSourceInternal(videoSource: IVideoSource?) {
|
private fun swapSourceInternal(videoSource: IVideoSource?) {
|
||||||
|
_lastGeneratedDash = null;
|
||||||
when(videoSource) {
|
when(videoSource) {
|
||||||
is LocalVideoSource -> swapVideoSourceLocal(videoSource);
|
is LocalVideoSource -> swapVideoSourceLocal(videoSource);
|
||||||
is JSVideoUrlRangeSource -> swapVideoSourceUrlRange(videoSource);
|
is JSVideoUrlRangeSource -> swapVideoSourceUrlRange(videoSource);
|
||||||
|
@ -415,7 +423,9 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||||
if(videoSource.hasItag) {
|
if(videoSource.hasItag) {
|
||||||
//Temporary workaround for Youtube
|
//Temporary workaround for Youtube
|
||||||
try {
|
try {
|
||||||
_lastVideoMediaSource = VideoHelper.convertItagSourceToChunkedDashSource(videoSource);
|
val results = VideoHelper.convertItagSourceToChunkedDashSource(videoSource);
|
||||||
|
_lastGeneratedDash = results.second;
|
||||||
|
_lastVideoMediaSource = results.first;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//If it fails to create the dash workaround, fallback to standard progressive
|
//If it fails to create the dash workaround, fallback to standard progressive
|
||||||
|
@ -635,6 +645,16 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||||
|
|
||||||
when (error.errorCode) {
|
when (error.errorCode) {
|
||||||
PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> {
|
PlaybackException.ERROR_CODE_IO_BAD_HTTP_STATUS -> {
|
||||||
|
if(error.cause is HttpDataSource.InvalidResponseCodeException) {
|
||||||
|
val cause = error.cause as HttpDataSource.InvalidResponseCodeException
|
||||||
|
|
||||||
|
Logger.v(TAG, null) {
|
||||||
|
"ERROR BAD HTTP ${cause.responseCode},\n" +
|
||||||
|
"Video Source: ${V8RemoteObject.gsonStandard.toJson(lastVideoSource)}\n" +
|
||||||
|
"Audio Source: ${V8RemoteObject.gsonStandard.toJson(lastAudioSource)}\n" +
|
||||||
|
"Dash: ${_lastGeneratedDash}"
|
||||||
|
};
|
||||||
|
}
|
||||||
onDatasourceError.emit(error);
|
onDatasourceError.emit(error);
|
||||||
}
|
}
|
||||||
//PlaybackException.ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED,
|
//PlaybackException.ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED,
|
||||||
|
|
|
@ -25,6 +25,7 @@ import androidx.media3.datasource.HttpDataSource;
|
||||||
import androidx.media3.datasource.HttpUtil;
|
import androidx.media3.datasource.HttpUtil;
|
||||||
import androidx.media3.datasource.TransferListener;
|
import androidx.media3.datasource.TransferListener;
|
||||||
|
|
||||||
|
import com.futo.platformplayer.logging.Logger;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.ForwardingMap;
|
import com.google.common.collect.ForwardingMap;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
@ -582,6 +583,8 @@ public class JSHttpDataSource extends BaseDataSource implements HttpDataSource {
|
||||||
requestHeaders = result.getHeaders();
|
requestHeaders = result.getHeaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Logger.Companion.v("JSHttpDataSource", "DataSource REQ: " + requestUrl, null);
|
||||||
|
|
||||||
HttpURLConnection connection = openConnection(new URL(requestUrl));
|
HttpURLConnection connection = openConnection(new URL(requestUrl));
|
||||||
connection.setConnectTimeout(connectTimeoutMillis);
|
connection.setConnectTimeout(connectTimeoutMillis);
|
||||||
connection.setReadTimeout(readTimeoutMillis);
|
connection.setReadTimeout(readTimeoutMillis);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit b518be4dd5e162e67e9ca64e09be3fe574fccdb7
|
Subproject commit 2c279cb123686d841bd663d1f6cf3464a582cf97
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4e826dcb6a237313e32ec81b0e973a4f69c429c3
|
Subproject commit c700081466038ee4782610feaa05cd4d34d024d8
|
|
@ -1 +1 @@
|
||||||
Subproject commit d2a903d5dd2d5d4b44c444aed61e014e5e63de93
|
Subproject commit 546d862342b10398d0737f0f2163691b611af8f2
|
|
@ -1 +1 @@
|
||||||
Subproject commit b518be4dd5e162e67e9ca64e09be3fe574fccdb7
|
Subproject commit 2c279cb123686d841bd663d1f6cf3464a582cf97
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4e826dcb6a237313e32ec81b0e973a4f69c429c3
|
Subproject commit c700081466038ee4782610feaa05cd4d34d024d8
|
|
@ -1 +1 @@
|
||||||
Subproject commit d2a903d5dd2d5d4b44c444aed61e014e5e63de93
|
Subproject commit 546d862342b10398d0737f0f2163691b611af8f2
|
Loading…
Add table
Add a link
Reference in a new issue