|
|
|
@ -2,6 +2,8 @@ package com.frank.androidmedia.controller |
|
|
|
|
|
|
|
|
|
import android.media.MediaPlayer |
|
|
|
|
import android.media.PlaybackParams |
|
|
|
|
import android.media.TimedText |
|
|
|
|
import android.util.Log |
|
|
|
|
import android.view.Surface |
|
|
|
|
import com.frank.androidmedia.listener.PlayerCallback |
|
|
|
|
import java.io.IOException |
|
|
|
@ -29,34 +31,49 @@ open class MediaPlayController(playerCallback: PlayerCallback) { |
|
|
|
|
try { |
|
|
|
|
renderFirstFrame = false |
|
|
|
|
mediaPlayer = MediaPlayer() |
|
|
|
|
mediaPlayer!!.setOnPreparedListener { |
|
|
|
|
mediaPlayer!!.start() |
|
|
|
|
playerCallback?.onPrepare() |
|
|
|
|
} |
|
|
|
|
mediaPlayer!!.setOnErrorListener { mp: MediaPlayer?, what: Int, extra: Int -> |
|
|
|
|
return@setOnErrorListener playerCallback?.onError(what, extra)!! |
|
|
|
|
} |
|
|
|
|
mediaPlayer!!.setOnCompletionListener { |
|
|
|
|
playerCallback?.onCompleteListener() |
|
|
|
|
} |
|
|
|
|
mediaPlayer!!.setOnInfoListener { mp, what, extra -> |
|
|
|
|
( |
|
|
|
|
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { |
|
|
|
|
if (!renderFirstFrame) { |
|
|
|
|
renderFirstFrame = true |
|
|
|
|
playerCallback?.onRenderFirstFrame() |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
return@setOnInfoListener true |
|
|
|
|
} |
|
|
|
|
mediaPlayer!!.setDataSource(filePath) |
|
|
|
|
mediaPlayer!!.setSurface(surface) |
|
|
|
|
setListener() |
|
|
|
|
mediaPlayer!!.prepareAsync() |
|
|
|
|
} catch (e: IOException) { |
|
|
|
|
e.printStackTrace() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun setListener() { |
|
|
|
|
mediaPlayer!!.setOnPreparedListener { |
|
|
|
|
mediaPlayer!!.start() |
|
|
|
|
playerCallback?.onPrepare() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mediaPlayer!!.setOnInfoListener { mp: MediaPlayer?, what: Int, extra: Int -> |
|
|
|
|
( |
|
|
|
|
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { |
|
|
|
|
if (!renderFirstFrame) { |
|
|
|
|
renderFirstFrame = true |
|
|
|
|
playerCallback?.onRenderFirstFrame() |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
return@setOnInfoListener true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mediaPlayer!!.setOnBufferingUpdateListener { mp, percent -> |
|
|
|
|
Log.i("MediaPlayer", "buffer percent=$percent") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mediaPlayer!!.setOnTimedTextListener { mp: MediaPlayer?, text: TimedText? -> |
|
|
|
|
Log.i("MediaPlayer", "subtitle=" + text?.text) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mediaPlayer!!.setOnErrorListener { mp: MediaPlayer?, what: Int, extra: Int -> |
|
|
|
|
return@setOnErrorListener playerCallback?.onError(what, extra)!! |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mediaPlayer!!.setOnCompletionListener { |
|
|
|
|
playerCallback?.onCompleteListener() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun currentPosition(): Int { |
|
|
|
|
if (mediaPlayer == null) |
|
|
|
|
return 0 |
|
|
|
|