首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表面已经发布了媒体代码

表面已经发布了媒体代码
EN

Stack Overflow用户
提问于 2018-07-17 14:56:00
回答 1查看 439关注 0票数 0

我试图通过TCP服务器对一个编码器/解码器进行编码,并将其显示在SurfaceView中,当我执行decodec.configure时,我有“表面已被释放”的信息。

这是我的密码:

代码语言:javascript
复制
SurfaceHolder.Callback callback1 = new SurfaceHolder.Callback() {

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        Log.d(TAG,"inSurfaceCreated");
        hasActiveHolder = true;
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        Log.d(TAG,"inSurfaceChanged");
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        Log.d(TAG,"inSurfaceDestroyed");
        hasActiveHolder = false;
    }
};
FrameLayout frameLayout1=findViewById(R.id.frameLayout);
SurfaceView surfaceView = new SurfaceView(this);
SurfaceHolder holder1 = (surfaceView.getHolder());
holder1.addCallback(callback1);
Surface surfaceAffichage = holder1.getSurface();
frameLayout1.addView(surfaceView);
//while(!hasActiveHolder){ }

MediaFormat mediaFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, 640, 640);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 1000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 20);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
final MediaCodec decodec = MediaCodec.createDecoderByType("video/avc");
decodec.configure(mediaFormat, surfaceAffichage, null, 0);

如果删除while循环上的注释,我将永远等待,程序永远不会进入回调surfaceCreated

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 10:10:33

您需要在SurfaceHoler.Callback的surfaceCreated主体中初始化解码器。此回调将在创建基础面时通知您。

另外:while(!hasActiveHolder){ }不这样做。如果有回调,使用它来启动您的逻辑的其余部分。如果确实需要检查某个事件是否定期发生,请引入等待时间并同步变量访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51384545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档