标签: textureview

什么时候TextureView的"消费者端"关闭?

用于Camera2 API的Google官方示例之一遇到了与以下BufferQueue has been abandoned问题相同的问题:

具体地,示例应用程序调用closeCamera()从方法onPause()的片段,其中的closeCamera()呼叫close()CameraCaptureSession,然后close()CameraDevice,然后close()ImageReader(用于实际拍照).在close()开启之后,LogCat中出现CameraDevice了几次上述BufferQueue has been abandoned消息,尽管我只在某些Android 5.1硬件(Nexus 4和Nexus 7 2013)上获得了消息,而在其他(Nexus 5和Nexus 6)上却没有.

fadden对此的评论是:

如果在进入onPause()之前关闭了消费者端,则会出现消息.

什么时候TextureView"消费者"将被关闭,为什么呢?

谷歌的示例代码没有主动做任何事情来关闭TextureView我能看到的东西.并且,由于TextureView在暂停时仍然可以看到,我原本预计"消费者方面"不会受到影响onPause(),但可能在之后onStop().

虽然我意识到这条消息(尽管是一个错误)是良性的,但我正在试图弄清楚如何摆脱它,如果没有其他原因,只是为了防止我一次又一次地被问到为什么我的代码记录这个错误.我希望通过更多地了解这个"消费者方面",我可以弄清楚当用户退出使用Camera2的活动或片段并避免此错误时,如何更好地整理.

android android-camera textureview

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

如何在TextureView上绘制位图

我正试图在Android上播放视频TextureView.关于视频任务运作良好.但MediaPlayer.prepare();需要一些时间.所以我想在那个时候展示一些占位符.我试图用Glide这样做:

public static final Rect rc = new Rect();
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int w, int h) {
    Surface s = new Surface(surfaceTexture);
    Glide.with(mTextureView.getContext())
            .load(thumbUrl)
            .asBitmap()
            .dontAnimate()
            .centerCrop()
            .into(new SimpleTarget<Bitmap>(w, h) {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                    rc.set(0,0,w,h);
                    Canvas c = mTextureView.lockCanvas(rc);
                    if (c == null)
                        return;
                    c.drawBitmap(resource, 0, 0, null);
                    mTextureView.unlockCanvasAndPost(c);
                }
            });

    try {
        mMediaPlayer.setDataSource(url);
        mMediaPlayer.setSurface(s);
        mMediaPlayer.prepareAsync();
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
                mMediaPlayer.setVolume(0,0);
                mMediaPlayer.start();
            } …
Run Code Online (Sandbox Code Playgroud)

android bitmap textureview android-glide

10
推荐指数
0
解决办法
6261
查看次数

带有SurfaceView的Camera2

我正在尝试使用简单的SurfaceView使新的Camera2工作,我在实时预览中遇到了一些问题.在某些设备上,图像会按比例拉伸,而在其他设备上看起来很好.

我已经设置了一个SurfaceView,我以编程方式调整以适应预览流大小的大小.

在Nexus 5上,这看起来不错,但一台三星设备就此消失了.此外,三星设备在预览的右侧部分有黑色边框.

是否真的无法使用SurfaceView,或者是时候切换到TextureView了?

android surfaceview android-camera textureview

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

BufferQueue已被放弃:使用TextureView播放视频时

每次我暂停我的活动(实际上是碎片)去另一个应用程序,返回onResume我尝试恢复视频播放,但它不播放:我得到一个空白的屏幕.经过调查,我在Logcat中看到以下内容

E/BufferQueueProducer: [unnamed-23827-0] queueBuffer: BufferQueue has been abandoned
E/MediaPlayer: error (1, -38)
E/MediaPlayer: error (1, -38)
E/MediaPlayer: error (1, -38)
E/MediaPlayer: error (1, -38)
E/BufferQueueProducer: [unnamed-23827-0] connect(P): BufferQueue has been abandoned
Run Code Online (Sandbox Code Playgroud)

这是我在简历中调用的代码

player.seekTo(mVideoSeekPosition);
player.start();
Run Code Online (Sandbox Code Playgroud)

仅供参考:我一直试图将这个答案应用到我的案例中,但我不能:当BufferQueue被放弃后我该怎么办?

UPDATE

我挣扎着独自一人,但我仍在崩溃.所以我发布了整个代码以寻求帮助

private void setupVideoPlayingSystem(View root) {
  textureView = (TextureView) root.findViewById(R.id.textureView);?    
  textureView.setSurfaceTextureListener(this);
}?    ?    ?    

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
  Log.d(TAG, "onSurfaceTextureAvailable");
  if (null == surface) {
    Log.d(TAG, "new surface");
    surface = new Surface(surfaceTexture);
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setSurface(surface); …
Run Code Online (Sandbox Code Playgroud)

video android surfaceview activity-lifecycle textureview

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

SurfaceView vs TextureView for Camera?

我想在我的应用程序中加入一个相机功能,这将允许视图本身的布局过渡,更改其大小,预览大小和有效处理方向更改.我应该使用TextureViewSurfaceView

决定决定..

android surfaceview android-camera textureview

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

Android SurfaceFxture.detachFromGLContext detachFromGLContext期间出错

我正在尝试在视频上使用TextureView,并且在尝试使用SurfaceTexture.detachFromGLContext时崩溃了很多.

我没有在Google上找到任何东西,有没有人知道它可能是什么?

谢谢

java.lang.RuntimeException: Error during detachFromGLContext (see logcat for details)
       at android.graphics.SurfaceTexture.detachFromGLContext(SurfaceTexture.java:195)
       at android.view.TextureView.destroySurface(TextureView.java:243)
       at android.view.TextureView.destroyHardwareResources(TextureView.java:355)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2311)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.destroyResources(HardwareRenderer.java:2318)
       at android.view.HardwareRenderer$Gl20Renderer.access$800(HardwareRenderer.java:1895)
       at android.view.HardwareRenderer$Gl20Renderer$2.run(HardwareRenderer.java:2303)
       at android.view.HardwareRenderer$Gl20Renderer.safelyRun(HardwareRenderer.java:2254)
       at android.view.HardwareRenderer$Gl20Renderer.destroyHardwareResources(HardwareRenderer.java:2297)
       at android.view.ViewRootImpl.destroyHardwareResources(ViewRootImpl.java:853)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1534)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6585)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
       at android.view.Choreographer.doCallbacks(Choreographer.java:603)
       at android.view.Choreographer.doFrame(Choreographer.java:573)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
       at android.os.Handler.handleCallback(Handler.java:733)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5586)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
       at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

android opengl-es textureview

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

如何确定摄像机预览帧的默认方向?

我正在尝试(再次)创建实际上正常工作的相机预览逻辑,适用于所有场景:

  • 任何设备:手机,平板电脑,烤面包机,等等
  • 任何相机:前向,后向,侧向,面向狗,等等
  • android.hardware.Cameraandroid.hardware.camera2
  • 肖像和风景设备方向

因为我minSdkVersion15岁,因为我并不特别关心表现,所以我试图用一个TextureView.并且,根据fadden在这里这里的地方的建议,我试图setTransform()TextureView适当的情况下使用Matrix它:

  • 正确定位预览,考虑设备方向
  • TextureView完全填充,以TextureView纵横比与预览帧宽高比不匹配的裁剪为代价
  • 不会拉伸图像,因此预览正方形项目(例如,3"方形Post-ItNote®)会在预览中显示正方形

在我的情况下,TextureView填充屏幕,减去状态栏和导航栏.

adjustAspectRatio()GrafikaPlayMovieActivity.java开始,我现在有:

  private void adjustAspectRatio(int videoWidth, int videoHeight,
                                 int rotation) {
    if (iCanHazPhone) {
      int temp=videoWidth;
      videoWidth=videoHeight;
      videoHeight=temp;
    }

    int viewWidth=getWidth();
    int viewHeight=getHeight();
    double aspectRatio=(double)videoHeight/(double)videoWidth;
    int newWidth, newHeight;

    if (getHeight()>(int)(viewWidth*aspectRatio)) {
      newWidth=(int)(viewHeight/aspectRatio);
      newHeight=viewHeight;
    }
    else {
      newWidth=viewWidth;
      newHeight=(int)(viewWidth*aspectRatio);
    }

    int xoff=(viewWidth-newWidth)/2;
    int yoff=(viewHeight-newHeight)/2;

    Matrix …
Run Code Online (Sandbox Code Playgroud)

android android-camera textureview android-textureview

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

在Android 7.0上并不总是调用SurfaceTexture方法

TextureView在我的代码中设置了一个SurfaceTextureListener.

在Android 6.0上,每当我离开活动并在Android 7.0上返回(分别)时都会调用这些方法onSurfaceTextureDestroyed,onSurfaceTextureAvailable我注意到onSurfaceTextureAvailable在创建Activity之后只调用一次.

每当我离开活动并返回时,表面不会被破坏和重新创建,就像我以前从Android 6.0那样.

经过一些调查后,我注意到API 18,19,24表现一种方式,API 20-23表现为另一种方式.

知道为什么,主要是如何使它在所有Android版本上表现相同?

android textureview android-7.0-nougat

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

玻璃相机预览显示乱码

我正在尝试在Google Glass中显示实时相机预览.

我正在使用所有相机默认设置(并且还尝试使用一些不同的图像格式;理想情况下,我可以使用其中一种YUV格式),但显示屏中显示的图像是乱码,如下所示:

乱码预览图像

布局很简单:

<?xml version="1.0" encoding="utf-8"?>
<TextureView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scan_preview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)

这是活动代码:

public class ScanActivity extends Activity {
    private static final String kTag = ScanActivity.class.getSimpleName();
    private TextureView mVideoCaptureView = null;
    private Camera mCamera = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);
        setTitle(R.string.title_scan);

        mVideoCaptureView = (TextureView) findViewById(R.id.scan_preview);
        mVideoCaptureView.setKeepScreenOn(true);
        mVideoCaptureView.setSurfaceTextureListener(new VideoCaptureTextureListener());
    }

    @Override
    protected void onPause() {
        super.onPause();
        stopVideo();
    }

    @Override
    protected void onResume() {
        super.onResume();
        startVideo();
    }

    private void startVideo() {
        if (mCamera != null) {
            mCamera.release(); …
Run Code Online (Sandbox Code Playgroud)

android android-camera google-glass textureview google-gdk

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

在 RecyclerView 中播放视频 - 滚动屏幕时播放/暂停视频

我已经实现了使用纹理视图和媒体播放器实现的视频播放器的回收器视图。

如果我向下滚动列表,我可以单击该项目并播放视频。但是,对于回收器视图,一旦视图离开屏幕,它就会被回收以供重用。如果我向上滚动,所有视图现在都是空白(黑色)。

我希望添加功能,当用户将视频滚动到屏幕外时,它将暂停并保持对该视频的引用,以便如果他们滚动回该视频,它将从该点开始播放。

我已签这个了,但是我不想下载的视频,我只是想流。我不是在找人为我做这件事,我只是在寻找一些指示,并希望有人可以分享他们的知识......在此先感谢

这是我到目前为止所做的:

视频播放器

public class CustomVideoPlayer implements TextureView.SurfaceTextureListener, VideoControllerView.MediaPlayerControl, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnVideoSizeChangedListener {

    private Context mContext;
    private String mUrl;
    private MediaPlayer mMediaPlayer;
    private Surface mSurface;
    private VideoControllerView mControllerView;

    private TextureView mTextureView;
    private CardView mCardView;
    private ProgressBar mProgress;
    private FrameLayout mView;
    private RelativeLayout mLayout;


    public CustomVideoPlayer(Context ctx, TextureView view, ProgressBar progressDialog, FrameLayout holderView){

        this.mContext = ctx;
        mTextureView = view;
        mTextureView.setSurfaceTextureListener(this);
        mProgress = progressDialog;
        mControllerView = new VideoControllerView(ctx);
        mView = holderView;

        mTextureView.setOnTouchListener(new ControlTouchListener());
    }


    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer textureview android-textureview android-recyclerview

7
推荐指数
2
解决办法
2万
查看次数