乐趣区

关于android:看完这篇文章你起码对分析视频花屏有点思路了-01

熟话说,授人以鱼不如授人以渔,这里记录的是在理论我的项目上,我遇到问题时是如何进行排查解决的,给大家提供个思路参考~

一、遇到的问题

最近在调试 usbcamera 性能,须要反对本地录像 + 后盾监控,也就是后盾须要拿到实时的视频流。

流程都调通了,这不,遇到个问题,pc 端后盾监控,播放的视频存在花屏景象(如下图所示)。

二、剖析问题

1)yuv 数据格式,数据大小是否失常?

这个打印下日志就能够确认,我遇到的确认是失常的。

2)本地流是否失常?

这个其实就是确认在流送达后盾之前,流是否是失常的。先排除是本地的起因,还是后盾的起因。

上面讲的就次要是如何去确认流是否失常?

i. 如上面代码块所示,我在流推送给后盾之前,把流数据保留到本地文件外面;

  private void saveStreamFile(byte[] buffer, String encodeFormat, int width, int height) {
        String dirString = "/sdcard/videoStream/";
        File dirFile = new File(dirString);

        if (!dirFile.exists()) {dirFile.mkdirs();
        }

        File saveFile = new File(dirString + width + "_" + height + "Stream.yuv");

        try {FileOutputStream fileOutputStream = new FileOutputStream(saveFile, true);
            fileOutputStream.write(buffer);
            fileOutputStream.flush();
            fileOutputStream.close();} catch (Exception e) {e.printStackTrace();
        }
    }

ii、流文件保留下来了,就是怎么查看的问题了。

我应用的是 Elecard YUV Viewer 工具,这个工具能够播放 yuv 文件。

应用 Elecard YUV Viewer 播放保留的 yuv 流文件,发现也是存在和 pc 同样的花屏问题。那就是终端设备的流在推送给后盾之前自身就存在问题。

我遇到的这个问题,是我把流数据的回调,放在了独自的 handlerThread 中推送给后盾,导致呈现的这个花屏问题,我狐疑是流数据没有按帧程序推送导致。

上面是去掉在 handlerThread 中推送流数据,pc 端看到的视频是失常的了。


自己从事 Android Camera 相干开发已有 5 年

目前在深圳下班

欢送大家关注我的微信公众号“小驰笔记”

大家一起学习交换

——– 2021.01.27 深圳 00:13

退出移动版