IJKPlayer integration in Kotlin
Add below dependancy in Player Library's build.gradle
dependencies {
// required, enough for most devices.
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.4'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'
// Other ABIs: optional
implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.4'
implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.4'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.4'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.4'
// ExoPlayer as IMediaPlayer: optional, experimental
implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.4'
}
Add below dependancy in application's build.gradle
dependencies {
implementation project(':playerlibrary')
}
Also include the following required permission in player library's manifest.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Implements IVLCVout.Callback and MediaPlayer.EventListener in activity or fragment
Include following veriables at class level in activity or fragment
private var videoController:VideoInterface? = null
companion object {
private val playerEnum = PlayerEnum.IJKPLAYER
}
Add following code to play using IJKPlayer
private fun init() {
if(playerEnum == PlayerEnum.IJKPLAYER){
videoController = IJKVideoController(this,ijkVideoView)
}
btnLoad.setOnClickListener(View.OnClickListener {
videoController!!.start(etServerUrl.text.toString())
})
}
Add following Controller code to handle player callback of IJKPlayer
class IJKVideoController (activity: Activity, ijkVideoViewObj: IjkVideoView): VideoInterface {
private var activity: Activity?=null
private var ijkVideoView: IjkVideoView?=null
var rtspUrl: String?=null
companion object {
private var TAG= "IJKVideoController"
}
init {
this.activity=activity
this.ijkVideoView=ijkVideoViewObj
}
override fun releasePlayer() {
if(ijkVideoView != null && ijkVideoView!!.isPlaying) {
Log.i(TAG, "Releasing player")
ijkVideoView!!.release(true)
} else {
Log.i(TAG, "releasePlayer() Video view is null or is not playing")
}
}
override fun unMute() {
if(ijkVideoView != null && ijkVideoView!!.isPlaying) {
Log.i(TAG, "unmute called")
ijkVideoView!!.unmute()
} else {
Log.i(TAG, "unmute() Video view is null or is not playing")
}
}
override fun mute() {
if(ijkVideoView != null && ijkVideoView!!.isPlaying) {
Log.i(TAG, "mute called")
ijkVideoView!!.mute()
} else {
Log.i(TAG, "mute() Video view is null or is not playing")
}
}
override fun start(url: String?) {
if(url != null && url.length > 0) {
Log.e(TAG,"rtsp: " + url)
ijkVideoView!!.setVideoURI(Uri.parse(url))
ijkVideoView!!.start()
} else {
Log.e(TAG,"empty rtsp")
}
}
override fun start(url: String?, width: Int, height: Int) {
this.rtspUrl = url
start(url)
}
/*
* show full screen view
* */
override fun showFullScreen(ip : String){
}
}
If you want to add other player in this code then you just need to add controller for that player and add enum in PlayerEnum class for it. Then create object of that controller using VideoInterface just like did for IJKVideoController to handle callback of that player
If you want to recompile IJKPlayer .so file for android then follow below Github repository. https://github.com/Bilibili/ijkplayer