Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

About OOM #17

Open
LoginGit opened this issue Jan 22, 2017 · 11 comments
Open

About OOM #17

LoginGit opened this issue Jan 22, 2017 · 11 comments
Labels

Comments

@LoginGit
Copy link

Hi,Thanks for your help, I encountered a new problem in your demo, I recorded the time to reach 20 seconds after the emergence of OOM,Look forward to your reply.

image

@CrazyOrr CrazyOrr added the bug label Jan 22, 2017
@CrazyOrr CrazyOrr reopened this Jan 22, 2017
@CrazyOrr
Copy link
Owner

Similar to #15

@LoginGit
Copy link
Author

恩,这个是不是属于javacv的问题,因为一直在push?

@CrazyOrr
Copy link
Owner

不是javacv的问题,是preview的帧不能及时地被record导致帧队列越来越长,最后OOM。
解决办法在这里

@LoginGit
Copy link
Author

恩,谢谢你的回复,“but frames may get dropped when a queue is full”,以前的OOM换成了队列限制,然后可能掉帧解决这个问题,我的理解就是当情况符合之前版本的OOM情况的时候,录制的视频就掉帧了。对吗?
我有一个疑问,这部分代码:
image
push进去之后的作用就是反交错对吗?当我去掉这部分代码内存走向就很平稳,去掉之后视频不正常,音视频不同步,但是视频的数据都是有的,也就是说是这个类导致了OOM,那么我们的反交错是否还有别的类呢,当然我就是说说,谢谢你的分享代码,我在看看吧,新春快乐,提前给您拜年了。

@LoginGit
Copy link
Author

我试了您新传的代码,拟录制3分钟视频尝试一下,报了以下错误:
image
这个问题是因为啥呢?

@LoginGit
Copy link
Author

进来后换摄像头录制报如下错误:
image

@LoginGit
Copy link
Author

LoginGit commented Jan 23, 2017

我又出一个错,我完全没改您的代码:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x670065 in tid 6032 (Thread-362)
这个是后摄像头报的错

@LoginGit
Copy link
Author

换后摄像头必奔溃,在三星S6上,小米4,三星S4上。

@CrazyOrr
Copy link
Owner

新春快乐
没错,掉帧是保证不OOM的代价,不过正常情况下record的速度会快于preview的速度,掉帧应该只是短时间里的情况。
frameFilter没有进行反交错的处理。FFmpegFrameFilter是对FFmpeg Filters的封装,Demo里用到了其中的transpose(翻转),crop(裁切),scale(缩放),用于将输出视频调整到videoWidth*videoHeight的尺寸。
你可以将下面这段代码

Frame filteredFrame = null;
try {
    frameFilter.push(recordedFrame.getFrame());
    filteredFrame = frameFilter.pull();
} catch (FrameFilter.Exception e) {
    e.printStackTrace();
}

注释掉,再把

mFrameRecorder.record(filteredFrame, avutil.AV_PIX_FMT_NV21);

修改为

mFrameRecorder.record(recordedFrame.getFrame());

就可以看到未经FFmpegFrameFilter处理过的视频了。

最后的几个新问题等我看一下再回复你。

@LoginGit
Copy link
Author

您那边有这些问题吗?

@CrazyOrr
Copy link
Owner

我在Nexus 6, Note 2 上试了,暂时无法复现这些问题。
从log看,很可能是javacv的问题。建议你把crash后的tombstone文件取出来(设备需root),然后提交issue到javacv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants