1.导包
implementation 'com.google.android.exoplayer:exoplayer-core:2.15.1'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.15.1'
2.在Androidifest.xml加入权限,我这里加了忘了与读写权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
这时候我去运行了一下,发现出现报错:
Error inflating class com.google.android.exoplayer2.ui.SimpleExoPlayerView,但是我有这个报错里面的属性。后来经过查询,找到了解决方案,这不是任何开发错误,因为如果它是任何代码错误,那么它应该已经在多个设备上发生。因此,我最后的手段是纠正到底发生了什么。由于应用程序的apk是作为捆绑包上传的,因此如果用户在通过ShareIt或Whatsapp共享捆绑包apk (侧加载)之后安装应用程序,它将崩溃,因为它是应用程序捆绑包的属性,我们不能共享从捆绑包生成的APK。然后我在build.gradle里面加了一句话就可以了。
4.ExoPlayer正常使用,因为我使用的是开发板,所以我直接指定的绝对地址:
package com.example.exoplayer
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.SimpleExoPlayer
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private var mPlayer: SimpleExoPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mPlayer = SimpleExoPlayer.Builder(this).build()
player_view!!.player = mPlayer
//也可以把这个地址替换成网络地址
val videoUrl = "/sdcard/Download/VID_20240229_102508.mp4"
val mediaItem = MediaItem.fromUri(videoUrl)
mPlayer!!.setMediaItem(mediaItem)
mPlayer!!.prepare()
mPlayer!!.play()
}
}