Android 第四十六章 TextureView

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>
相关推荐
tangweiguo030519871 小时前
Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态
android
遥不可及zzz2 小时前
Android 应用程序包的 adb 命令
android·adb
无知的前端2 小时前
Flutter 一文精通Isolate,使用场景以及示例
android·flutter·性能优化
_一条咸鱼_3 小时前
Android Compose 入门之字符串与本地化深入剖析(五十三)
android
ModestCoder_3 小时前
将一个新的机器人模型导入最新版isaacLab进行训练(以unitree H1_2为例)
android·java·机器人
robin_suli4 小时前
Spring事务的传播机制
android·java·spring
鸿蒙布道师5 小时前
鸿蒙NEXT开发对象工具类(TS)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
Harrison_zhu6 小时前
Ubuntu18.04 编译 Android7.1代码报错
android
CYRUS STUDIO8 小时前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·汇编·算法·网络安全·逆向·ollvm
扫地的小何尚8 小时前
NVIDIA工业设施数字孪生中的机器人模拟
android·java·c++·链表·语言模型·机器人·gpu