标签: textureview

Android在两个进程之间共享SurfaceTexture

是否可以在两个进程之间共享SurfaceTexture,例如Activity和Service?

我想用TextureView创建一个Activity,并从一个单独的Service更新它的SurfaceTexture.

到目前为止,我正在创建一个带有生成的OpenGL纹理的SurfaceTexture(通过glGenTextures),然后我将这个表面纹理设置为我的TextureView:

mSurfaceTexture = new SurfaceTexture(texture_id);
mTextureView.setSurfaceTexture(mSurfaceTexture);
Run Code Online (Sandbox Code Playgroud)

在活动上显示此SurfaceTexture的相机预览正常工作:

mCamera = Camera.open();
mCamera.setPreviewTexture(mTextureView.getSurfaceTexture());
mCamera.startPreview();
Run Code Online (Sandbox Code Playgroud)

我想做同样的事情,但是从一个单独的服务,将texture_id传递给它,类似于:

mCamera = Camera.open();
mCamera.setPreviewTexture(new SurfaceTexture(texture_id));
mCamera.startPreview();
Run Code Online (Sandbox Code Playgroud)

原因是我有一个单独的进程调用私有api,需要SurfaceTexture来传输一些内容,并且可以通过应用程序中的aidl访问此进程.

谢谢

android aidl android-service textureview

5
推荐指数
1
解决办法
2597
查看次数

半透明TextureViews无法正常工作

我无法通过setAlpha方法更改TextureView的透明度,以将其半透明地掩盖,因为它是由android SDK承诺的.例如,mTextureView.setAlpha(0.5f)没有任何效果.

android alpha transparent alpha-transparency textureview

4
推荐指数
2
解决办法
1881
查看次数

如何减少MediaCodec视频/ avc解码的延迟

我在Nexus 5上运行的Grafika MediaCodec示例代码中执行了一些简单的MoviePlayer.java计时.我在这些位置放了一个日志语句:

在前一行的203行

decoder.queueInputBuffer
Run Code Online (Sandbox Code Playgroud)

在第244行之后

decoder.dequeueOutputBuffer
Run Code Online (Sandbox Code Playgroud)

我使用了日志语句presentationTimeUs.

以下是logcat的摘录:

01-29 10:56:43.295: I/Grafika(21286): queueInputBuffer index/pts, 2,0
01-29 10:56:43.305: I/Grafika(21286): queueInputBuffer index/pts, 0,33100
01-29 10:56:43.315: I/Grafika(21286): queueInputBuffer index/pts, 3,66466
01-29 10:56:43.325: I/Grafika(21286): queueInputBuffer index/pts, 1,99833
01-29 10:56:43.325: I/Grafika(21286): queueInputBuffer index/pts, 2,133200
01-29 10:56:43.335: I/Grafika(21286): queueInputBuffer index/pts, 0,166566
01-29 10:56:43.345: I/ATSParser(21286): discontinuity on stream pid 0x1011
01-29 10:56:43.345: I/ATSParser(21286): discontinuity on stream pid 0x1100
01-29 10:56:43.345: I/Grafika(21286): queueInputBuffer index/pts, 3,199933
01-29 10:56:43.345: I/Grafika(21286): dequeueOutputBuffer index/pts, 7,0
01-29 10:56:43.345: …
Run Code Online (Sandbox Code Playgroud)

android h.264 textureview mediacodec mediaextractor

4
推荐指数
1
解决办法
5757
查看次数

在图像渲染后,MediaPlayer无法渲染到TextureView

我有一个MediaPlayer渲染视频TextureView.这很有效.

现在,我希望在TextureView给定时间MediaPlayer内在此上显示静止图像,然后将视频呈现为相同TextureView.

这是我渲染位图的代码:

Canvas canvas = mTextureView.lockCanvas();
canvas.drawBitmap(sourceBitmap, matrix, new Paint());
mTextureView.unlockCanvasAndPost(canvas);
Run Code Online (Sandbox Code Playgroud)

在此之后,任何播放视频的尝试都会导致ERROR_INVALID_OPERATION(-38)从视频播放器触发.

我试着评论出来的电话drawBitmap,但错误仍然发生了.如此看来,中调用简单的动作lockCanvas,然后unlockCanvasAndPost在结果TextureView是不适合MediaPlayer使用.

有什么方法可以将其重置为TextureView允许MediaPlayer使用它的状态吗?

我正在研究Android 4.2.2.

video android android-mediaplayer textureview

4
推荐指数
1
解决办法
5380
查看次数

如何在这个例子中使用glUniform1f?

我已经搜索,阅读并尝试了许多关于如何将值传递给GLSL程序的不同示例.但遗憾的是每一次尝试都失败了:(

我打算做的很简单:在我的Android应用程序中只需要一个小小的开放式3D动画.由于我的GUI设计,我更喜欢使用TextureView作为OpenGl Surface.我找到了一些适合我项目的代码.

但我的问题似乎完全在这个例子中.

当我编译并运行它时,它确实完成了它应该做的事情.在屏幕上绘制一个三角形.

然后我像这样修改了顶点着色器:

final String vertexShaderSource = 
   "attribute vec4 position;\n" +
   "attribute float myValue;\n" +
   "void main () {\n" +
         "vec4 oo;\n"+
         "oo[0] = position[0];\n"+
         "oo[1] = position[1] * myValue;\n"+
         "oo[2] = position[2];\n"+
         "oo[3] = position[3];\n"+
         "gl_Position = oo;\n" +
   "}";
Run Code Online (Sandbox Code Playgroud)

现在,我想将值传递给属性myValue.

所以这是我对run方法的修改.

public void run() {
   initGL();

   int attribPosition = GLES20.glGetAttribLocation(mProgram,
           "position");
   checkGlError();

   int valuePosition = GLES20.glGetAttribLocation(mProgram,
           "myValue");
   checkGlError();

   System.out.println("att id:"+ attribPosition 
           + " val id:" + valuePosition);

//[...]

   while (true) { …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es textureview

3
推荐指数
1
解决办法
5222
查看次数

SurfaceView或TextureView组合

我正在尝试将实时效果应用于相机预览并在多个视图中显示,我该怎么办?
(就像相机2)(快照)

如果左侧没有ScrollView,我知道有两种方法可以显示相机预设的实时效果.

  • 使用GLSurfaceViewsetRenderer.将SurfaceTexture绑定为GLES外部纹理,并使用GLSL(OpenGL着色语言)来应用效果.
  • 使用TextureView.它更复杂,因为需要设置EGLContext/EGLSurface并进行线程管理.

但是,我不知道如何使ScrollView与实时效果项叠加GLES组合.

  1. 我应该选择GLSurfaceView(用于性能)还是TextureView(用于flexble)来实现ScrollView?哪一个更好的解决方案,为什么?
  2. 是否可以在多个视图之间共享一个EGL上下文/表面?如果是,任何代码片段都可以引用?

在谷歌搜索和阅读漂亮的图形架构文章和Grafika项目后,我仍然不知道......
也许我想念一些重要的事情,有人指出我了吗?提前致谢.

android opengl-es surfaceview glsurfaceview textureview

2
推荐指数
1
解决办法
2809
查看次数

Android - Camera X - 如何检查设备是否有前置摄像头 CameraX.LensFacing.FRONT

我是第一次使用 Camera X,但找不到方法来检查设备在运行时是否有前置或后置摄像头...

我只需要使用预览,我不捕获图像,所以我不能使用按钮。

private var lensFacing = CameraX.LensFacing.FRONT

 val viewFinderConfig = PreviewConfig.Builder().apply {
            setLensFacing(lensFacing)
            setTargetAspectRatio(screenAspectRatio)
            setTargetRotation(viewFinder.display.rotation)
        }.build()
Run Code Online (Sandbox Code Playgroud)

如果用户设备没有前置摄像头,如何确保应用程序不会崩溃?提前致谢!

android textureview android-camerax

2
推荐指数
1
解决办法
4259
查看次数

纹理查看视频和位图显示

我有一个显示位图(占位符图像)的TextureView,当用户加载视频时,textureView应该显示视频.

我设法在纹理视图中播放视频并在纹理视图中显示位图,但是当按顺序完成时,我只得到一个黑屏.

在我的onSurfaceTextureAvailable方法中,我在表面视图上绘制一个位图,如下所示:

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_add_clip);
    Canvas canvas = lockCanvas();
    canvas.drawBitmap(bm, (width/2)-(bm.getWidth()/2), (height/2)-(bm.getHeight()/2), null);
    unlockCanvasAndPost(canvas);
}
Run Code Online (Sandbox Code Playgroud)

当用户从其库中选择视频时,我将Uri加载到媒体播放器中并将曲面设置为媒体播放器.但是仍然显示位图.我试图通过清除画布删除位图,它确实删除了位图,但纹理视图只是黑色,也不会显示视频.

public void setMediaPlayer(MediaPlayer mediaPlayer) {
    // Canvas canvas = lockCanvas();
    // canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
    // unlockCanvasAndPost(canvas);

    Surface s = new Surface(getSurfaceTexture());
    mMediaPlayer = mediaPlayer;
    mMediaPlayer.setSurface(s);
    mMediaPlayer.setOnPreparedListener(this);
}
Run Code Online (Sandbox Code Playgroud)

有些东西告诉我,用于显示视频的表面视图位于我在TextureAvailble上绘制的位图的后面.当我尝试清除画布时,我也清除了媒体播放器想要使用的表面.有解决方案吗

android android-canvas textureview android-bitmap

1
推荐指数
1
解决办法
5677
查看次数

为什么不推荐使用SurfaceView?

我知道在ICS之后出现了TextureView.但是,ICS并未弃用SurfaceView.

SurfaceView具有穿孔结构,因此它有许多限制点.无法堆叠两个SurfaceView而无法翻译等.

尽管出现了TextureView,为什么不推荐使用SurfaceView?

android surfaceview textureview

1
推荐指数
1
解决办法
406
查看次数

为什么我的视频不适合纹理的大小,因为我改变了纹理的大小

Iam试图使用纹理视图渲染视频动画,动画效果很好,但是当我将纹理缩放到不同大小时,媒体播放器不会缩放以适应纹理的大小,视频总是在后台播放全屏我只能看到视频的一部分,当我缩放纹理
我的代码在运行Android 4.0的一些Android设备上工作正常,但不适用于更高版本的Android设备.继承我的动画代码,请告诉我问题出在哪里..

public class MainActivity extends Activity implements TextureView.SurfaceTextureListener{
AnimationSet animset;
TextureView myTexture;
MediaPlayer mMediaPlayer;
Surface s;
int height;
static final String LogFileName = "Log";
int width;
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  myTexture = new TextureView(this);
  myTexture.setSurfaceTextureListener(this);
  setContentView(myTexture);    
   }

   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture arg0, int arg1,
   int arg2) {


   String mediaStorageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
s = new Surface(arg0);

   try {
       mMediaPlayer= new MediaPlayer();
       mMediaPlayer.setSurface(s);
       mMediaPlayer.setDataSource(mediaStorageDir+"/AirIndia.mp4");
       mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
       mMediaPlayer.prepareAsync();
       mMediaPlayer.setLooping(true);
       mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {

                mMediaPlayer.start(); …
Run Code Online (Sandbox Code Playgroud)

scaling android android-mediaplayer textureview

0
推荐指数
1
解决办法
3299
查看次数

Android 中如何检查视频有没有声音?

我正在使用带有 MediaPlayer 的 TextureView 来播放 url 中的 mp4 视频。有什么方法可以以编程方式检查我正在播放的视频是否有声音?

编辑:我正在使用 API 14,所以我无权访问 MediaPlayer 方法 getTrackInfo

非常感谢

mp4 android android-mediaplayer textureview android-textureview

0
推荐指数
1
解决办法
1260
查看次数