Open JJSarrasin opened 3 months ago
My main concern is about DrmSessionManagerProvider.setDrmHttpDataSourceFactory + MediaSourceFactory.setDataSourceFactory, maybe there are other entry points.
Can you please add a bit more concrete info on how Ktor would resolve this? At the moment these are configured with different DataSource.Factory
instances, and each default to DefaultHttpDataSource.Factory
for handling HTTP URIs.
What are you suggesting would change here?
Note that we probably wouldn't accept a dependency on Ktor from the main exoplayer
module, so any integration would need to be in an extension (similar to the datasource-okhttp
extension).
From my understanding, there is a dependency between media3 and okhttp.
Here is the minimal use we do from exo:
val renderersFactory = DefaultRenderersFactory(context)
val dataSourceFactory = OkHttpDataSource.Factory(httpClient)
val drmSessionManagerProvider = DefaultDrmSessionManagerProvider()
drmSessionManagerProvider.setDrmHttpDataSourceFactory(dataSourceFactory)
val mediaSourceFactory = DefaultMediaSourceFactory(context)
.setLoadErrorHandlingPolicy(DefaultLoadErrorHandlingPolicy(2))
.setDrmSessionManagerProvider(drmSessionManagerProvider)
mediaSourceFactory.setDataSourceFactory(dataSourceFactory)
val exoPlayer = ExoPlayer.Builder(context, renderersFactory)
.setMediaSourceFactory(mediaSourceFactory)
.build()
The passed httpClient is a OkHttpclient variable.
Of course, we won't use media3 on the iOS/web part of our project, so we'll only use the okhttp client implementation of ktor wrapper. We're using Ktor for all the common part of the code and it's kind of the main lib for doing network request in modern KMP projects.
Maybe we should ask Ktor lib to expose a way to get the OkHttpEngine/OkHttpClient instead ?
Maybe we should ask Ktor lib to expose a way to get the OkHttpEngine/OkHttpClient instead ?
This seems like a a reasonable request to me.
Regarding the suggestion for a KtorDataSource
, we're unlikely to work on this soon I'm afraid, but we would accept a high quality PR. Any such PR should include a subclass of DataSourceContractTest
(see an example in OkHttpDataSourceContractTest
).
The standard for HTTP clients is increasingly shifting towards Ktor. It avoids to manage multiple http source in the same project.
My main concern is about DrmSessionManagerProvider.setDrmHttpDataSourceFactory + MediaSourceFactory.setDataSourceFactory, maybe there are other entry points.
Note that Ktor is using OkHttp (or other engines) under the hood, it's more like a convenient way to use Ktor everywhere from a developer perspective. It won't improve any performance or so.