V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GGMM
V2EX  ›  Android

安卓摄像头录制 60fps 并使用 MediaCodec 编码成 H.265 的视频

  •  
  •   GGMM · 2021-08-17 21:03:13 +08:00 · 8931 次点击
    这是一个创建于 1184 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题所示,这是我目前的需求。我目前实现到的程度:使用安卓 Camera2 API 可以实现OnImageAvailable回调函数的 60fps 的输出(即 16.6ms ),但是当我使用 MediaCodec 进行 H.265 视频编码时,编码的速度只有大约 50fps,平均 20ms 。使用 H.265 是因为博士师兄是想要用 H.265 来做,所以必须用 H.265 格式编码。

    我尝试了一些解决方案,但是它们大部分都是输出 30fps,或者是预览 120fps,我想要的是编码 H.265 的视频是 60fps 。我认为我这里的瓶颈主要出在编码速度上。大致的流程是:OnImageAvailable得到 YUV 数组->转换为 NV12 的格式并送入缓冲池->编码线程从缓冲池中读取 NV12 的 byte 数组并进行编码。

    我上面可能说得有点含糊,主要是想问一下大家有没有试过使用MediaCodec进行硬编码,以及相应的编码速度大概是多少。

    11 条回复    2021-08-23 03:43:12 +08:00
    winterbells
        1
    winterbells  
       2021-08-17 21:33:05 +08:00 via Android
    不是很懂,是通用需求吗
    有些手机系统相机可以设置 hevc 编码
    JayFang1993
        2
    JayFang1993  
       2021-08-17 21:43:14 +08:00
    插帧
    felixlong
        3
    felixlong  
       2021-08-17 22:48:05 +08:00
    使用 MediaCodec.createInputSurface, 不要用软件做 YUV 的转换, 软件肯定达不到 60FPS.
    rpw
        4
    rpw  
       2021-08-17 23:50:12 +08:00
    @GGMM 三楼正解,直接用 MediaCodec 编码就可以了,不需要做软件转换。想想,现在手机上录制高帧率视频基本都是标配了
    rpw
        5
    rpw  
       2021-08-17 23:57:58 +08:00
    mxT52CRuqR6o5
        6
    mxT52CRuqR6o5  
       2021-08-18 00:22:46 +08:00 via Android
    这种都是借助硬件编码能力的,你要是用 cpu 编码就手机那种性能肯定实时不了,有可能就是硬件达不到,不知道你们用的什么手机
    z42514
        7
    z42514  
       2021-08-18 09:23:26 +08:00
    关注一下,最近也在折腾类似的需求,打算用 camerax 进行实现
    largek
        8
    largek  
       2021-08-18 13:59:21 +08:00
    有没有尝试过降低分辨率和帧率?
    largek
        9
    largek  
       2021-08-18 13:59:41 +08:00
    说错:分辨率和码率
    GGMM
        10
    GGMM  
    OP
       2021-08-19 09:24:40 +08:00
    @felixlong 谢谢,我用的是谷歌 cpp 写的 libyuv 转换的 YUV 格式,这部分花了 8ms,对于 60fps 还是慢了点。
    @rpw 谢谢,我今天尝试一下(因为昨天赶着回家)
    @mxT52CRuqR6o5 我在自己的荣耀 v30 pro 上测试的,实验室里还有个小米 11pro 我还没测。
    @largek 我之前把分辨率降低到了 720P,但是帧率还下降了 2fps 左右。
    bitdepth
        11
    bitdepth  
       2021-08-23 03:43:12 +08:00 via iPad
    能用硬體加速盡量加速,能 DMA 盡量 DMA
    不用想 cpu 效能更好,硬體不行就換更好的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.