using OkHttp for ExoPlayer

This commit is contained in:
Mariotaku Lee 2017-03-01 11:22:22 +08:00
parent 2db855e2f3
commit 7f5d34fe94
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
4 changed files with 31 additions and 6 deletions

View File

@ -169,6 +169,7 @@ dependencies {
compile 'com.getkeepsafe.taptargetview:taptargetview:1.6.0'
compile 'net.ypresto.androidtranscoder:android-transcoder:0.2.0'
compile "com.google.android.exoplayer:exoplayer:$exoplayer_version"
compile "com.google.android.exoplayer:extension-okhttp:$exoplayer_version"
compile 'com.github.mariotaku.MediaViewerLibrary:base:0.9.17'
compile 'com.github.mariotaku.MediaViewerLibrary:subsample-image-view:0.9.17'

View File

@ -40,7 +40,6 @@ import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import com.google.android.exoplayer2.trackselection.TrackSelectionArray
import com.google.android.exoplayer2.upstream.DataSource
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory
import kotlinx.android.synthetic.main.layout_media_viewer_exo_player_view.*
import kotlinx.android.synthetic.main.layout_media_viewer_video_overlay.*
import org.mariotaku.mediaviewer.library.MediaViewerFragment
@ -54,7 +53,8 @@ import org.mariotaku.twidere.fragment.media.VideoPageFragment.Companion.isContro
import org.mariotaku.twidere.fragment.media.VideoPageFragment.Companion.isLoopEnabled
import org.mariotaku.twidere.fragment.media.VideoPageFragment.Companion.isMutedByDefault
import org.mariotaku.twidere.fragment.media.VideoPageFragment.Companion.media
import org.mariotaku.twidere.util.UserAgentUtils
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
import javax.inject.Inject
/**
@ -63,7 +63,10 @@ import org.mariotaku.twidere.util.UserAgentUtils
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPageFragment> {
private lateinit var mediaDataSourceFactory: DataSource.Factory
@Inject
lateinit var dataSourceFactory: DataSource.Factory
private lateinit var mainHandler: Handler
private var playAudio: Boolean = false
@ -119,7 +122,6 @@ class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPage
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
mediaDataSourceFactory = DefaultHttpDataSourceFactory(UserAgentUtils.getDefaultUserAgentString(context))
mainHandler = Handler()
@ -141,6 +143,11 @@ class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPage
updateVolume()
}
override fun onAttach(context: Context) {
super.onAttach(context)
GeneralComponentHelper.build(context).inject(this)
}
override fun onStart() {
super.onStart()
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
@ -237,7 +244,7 @@ class ExoPlayerPageFragment : MediaViewerFragment(), IBaseFragment<ExoPlayerPage
}
val uri = getDownloadUri() ?: return
val uriSource = ExtractorMediaSource(uri, mediaDataSourceFactory, DefaultExtractorsFactory(),
val uriSource = ExtractorMediaSource(uri, dataSourceFactory, DefaultExtractorsFactory(),
null, null)
if (isLoopEnabled) {
playerView.player.prepare(LoopingMediaSource(uriSource))

View File

@ -27,6 +27,8 @@ import android.os.Build
import android.os.Looper
import android.support.v4.net.ConnectivityManagerCompat
import android.support.v4.text.BidiFormatter
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory
import com.google.android.exoplayer2.upstream.DataSource
import com.nostra13.universalimageloader.cache.disc.DiskCache
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache
import com.nostra13.universalimageloader.core.ImageLoader
@ -41,6 +43,7 @@ import dagger.Module
import dagger.Provides
import edu.tsinghua.hotmobi.HotMobiLogger
import okhttp3.ConnectionPool
import okhttp3.OkHttpClient
import org.mariotaku.kpreferences.KPreferences
import org.mariotaku.mediaviewer.library.FileCache
import org.mariotaku.mediaviewer.library.MediaDownloader
@ -140,7 +143,7 @@ class ApplicationModule(private val application: Application) {
@Provides
@Singleton
fun connectionPoll(): ConnectionPool {
fun connectionPool(): ConnectionPool {
return ConnectionPool()
}
@ -316,6 +319,17 @@ class ApplicationModule(private val application: Application) {
return application.getSystemService(Context.LOCATION_SERVICE) as LocationManager
}
@Provides
@Singleton
fun dataSourceFactory(preferences: SharedPreferencesWrapper, dns: TwidereDns,
connectionPool: ConnectionPool): DataSource.Factory {
val conf = HttpClientFactory.HttpClientConfiguration(preferences)
val builder = OkHttpClient.Builder()
HttpClientFactory.initOkHttpClient(conf, builder, dns, connectionPool)
val userAgent = UserAgentUtils.getDefaultUserAgentStringSafe(application)
return OkHttpDataSourceFactory(builder.build(), userAgent, null)
}
private fun createDiskCache(dirName: String, preferences: SharedPreferencesWrapper): DiskCache {
val cacheDir = Utils.getExternalCacheDir(application, dirName)
val fallbackCacheDir = Utils.getInternalCacheDir(application, dirName)

View File

@ -29,6 +29,7 @@ import org.mariotaku.twidere.adapter.*
import org.mariotaku.twidere.app.TwidereApplication
import org.mariotaku.twidere.fragment.*
import org.mariotaku.twidere.fragment.filter.FilteredUsersFragment
import org.mariotaku.twidere.fragment.media.ExoPlayerPageFragment
import org.mariotaku.twidere.loader.*
import org.mariotaku.twidere.preference.AccountsListPreference
import org.mariotaku.twidere.preference.KeyboardShortcutPreference
@ -138,4 +139,6 @@ interface GeneralComponent {
fun inject(loader: BaseUserListsLoader)
fun inject(controller: PremiumDashboardActivity.ExtraFeatureViewController)
fun inject(fragment: ExoPlayerPageFragment)
}