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>
相关推荐
雨白5 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹6 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空8 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭8 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日9 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安9 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑10 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟14 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡15 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi0015 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体