using OkHttp for ExoPlayer
This commit is contained in:
parent
2db855e2f3
commit
7f5d34fe94
|
@ -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'
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue