熟话说,授人以鱼不如授人以渔,这里记录的是在实际项目上,我遇到问题时是如何进行排查解决的,给大家提供个思路参考~
一、遇到的问题
最近在调试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
本文含有隐藏内容,请 开通VIP 后查看