kotlin
package com.clzw.demo
import android.graphics.SurfaceTexture
import android.media.AudioManager
import android.media.MediaPlayer
import android.os.Bundle
import android.view.Surface
import android.view.TextureView
import androidx.appcompat.app.AppCompatActivity
import com.clzw.demo.databinding.ActivityMainBinding
/**
* <uses-permission android:name="android.permission.INTERNET" />
* TextureView 可用于显示内容流,例如来自相机预览、视频或 OpenGL 场景的内容流。内容流可以来自应用程序的进程以及远程进程。
* TextureView 只能在硬件加速窗口中使用。当在软件中渲染时,TextureView 将不会绘制任何内容。
*/
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
lateinit var mMediaPlayer : MediaPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
initData()
initClick()
}
private fun initData() {
mMediaPlayer=MediaPlayer()
}
private fun initClick() {
binding.textureView.surfaceTextureListener= object :TextureView.SurfaceTextureListener{
override fun onSurfaceTextureAvailable(surface: SurfaceTexture, width: Int, height: Int) {
//当TextureView的SurfaceTexture准备好使用时调用
mMediaPlayer.setSurface(Surface(surface))
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
mMediaPlayer.setDataSource("xx")//视频地址
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener { mMediaPlayer.start() }
}
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture, width: Int, height: Int) {
// 当SurfaceTexture的缓冲区大小更改时调用,
}
override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean {
//当 SurfaceTexture 即将被销毁时调用
mMediaPlayer.stop()
mMediaPlayer.release()
return true
}
override fun onSurfaceTextureUpdated(surface: SurfaceTexture) {
//当指定的 SurfaceTexture 有新的视频帧时调用
}
}
}
}
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<TextureView
android:id="@+id/textureView"
android:layout_width="800dp"
android:layout_height="500dp"/>
</LinearLayout>