推荐几个堪称教科书级别的 Android 音视频入门项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
glumess
V2EX    Android

推荐几个堪称教科书级别的 Android 音视频入门项目

  •  
  •   glumess 2020-05-06 21:17:32 +08:00 15084 次点击
    这是一个创建于 2029 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直播 中有提到几个不错的开源项目,这里再重点推荐一下:

    目前,市面上关于音视频学习的相关书籍并不多,而且即使看了书籍学了理论,最终还是要回归到代码上来。

    毕竟 IT 行业实践性要求高,调动手能力,音视频这方面就更得多操作和探索了。

    推荐下面几个项目会各有侧重,分别涵盖了 Android 音视频录制 API 、OpenGL 渲染和综合运用的例子。

    • GPUImage

    Github 地址:

    https://github.com/cats-oss/android-gpuimage

    GPUImage 毫无疑问是音视频项目里面必读工程了,它的侧重点在于渲染方面。

    有些公司的招聘要求上可能都会写明熟悉 GPUImage,重要性可见一斑。

    通过阅读 GPUImage 的源码,能够让你掌握 OpenGL 的渲染以及渲染链的搭建,同时工程里面很多特效 Shader 代码,通过阅读和实践这些 Shader 代码,能够让你掌握初步的 Shader 编写能力。

    比如常见的滤镜效果,在 GPUImage 就有现成的代码例子,这一点在我的直播中也有讲到。有兴趣的可以翻阅视频,掌握常见滤镜效果的代码编写。

    如果需要 GPUImage 相关的源码分析文档,也可以参考我之前写过的一篇文章:

    OpenGL 之 GPUImage 源码分析

    • AudioVideoRecordingSample

    Github 地址

    https://github.com/saki4510t/AudioVideoRecordingSample

    此项目的侧重点在于 Android 音视频相关 API 的使用,尤其是在 录制和编码方面的。

    该项目运行后能够将 Camera 采集的视频和音频内容编码成一个 MP4 文件。

    这其中用到了 MediaCodec 做编码,用到了 MediaMuxer 将音频和视频混合。

    这样的一个完整示例对于掌握 Android 上音视频相关 API 帮忙非常大,因为它能够成功正确运行,而且可以通过去修改其源码来做自己的实验,验证自己对于 API 的理解和掌握。

    当你能够熟练掌握其内容,或者你就可以试着更进一步,尝试用 FFmpeg 做音视频的编码和混合,实现和 Android 音视频 API 一样的功能。

    • Grafika

    Github 地址

    https://github.com/google/grafika

    此项目是 Google 提供的一个非官方的项目,它的侧重点在于将 OpenGL 与 Android 音视频 API 综合运用。

    它包含了很多个完整小示例,比如如何使用 TextureView 显示 OpenGL 内容、使用三种方式进行 OpenGL 内容的录制、如何进行硬编码操作等。

    通过阅读这些例子,能够让你掌握更多的技巧,把前面学会的 OpenGL 和 Android 音视频 API 更灵活运用了,进一步加深理解。

    甚至有些例子都可以用到项目早期需求中去的,比如如何进行 EGL 的封装、渲染线程与主线程的分离。

    另外,以上三个例子都会包含 Camera 相关的操作,比如如何将 Camera 内容展示到 SurfaceView 、TextureView 上,如何进行 Camera 拍摄等。

    最后

    之前这三个项目堪称教科学书级别的,不是没有理由的。至少我都源码阅读了两边以上。

    第一次阅读的时候会觉得 " 嗯,明白怎么回事了 ",等到项目实践了,需要自己从头搞一遍,这时再回头看,会有新的感悟 "哦,原来要这样设计呀" ,等到更熟练的时候,在来看,可能就会觉得 "咦,这块能优化一波了"。

    以上,希望对于想从事音视频开发的你,也能够看看上面几个项目源码,学习到更多技巧,共同进步。

    26 条回复    2020-05-20 16:57:54 +08:00
    glumess
        1
    glumess  
    OP
       2020-05-06 21:49:17 +08:00
    欢迎关注我的公众号 [音视频开发进阶] ,一起来搞搞音视频呀
    OneMan
        2
    OneMan  
       2020-05-06 22:56:10 +08:00
    我们也是搞音视频的,LZ 在哪高就呢
    BenX
        3
    BenX  
       2020-05-06 22:59:03 +08:00
    楼主,欢迎关注。我们也搞音视频重点在 WebRTC 方向
    glumess
        4
    glumess  
    OP
       2020-05-06 23:03:35 +08:00
    @OneMan 目前在抖音打杂,欢迎交流 https://glumes.com
    glumess
        5
    glumess  
    OP
       2020-05-06 23:03:53 +08:00
    @BenX 可以关注一波微信公众号交流哦
    GromHellscream
        6
    GromHellscream  
       2020-05-06 23:07:55 +08:00
    那 iOS 方向的...
    glumess
        7
    glumess  
    OP
       2020-05-06 23:15:28 +08:00
    @GromHellscream 等我学会了 iOS 再来推荐吧~~~
    OneMan
        8
    OneMan  
       2020-05-06 23:33:27 +08:00
    ios 有没有原生的解码 mp3,m4a 等类型文件, 然后解码出 pcm buffer 的用例呢?
    类似 android 的 MediaExtractor 和 MediaCodec
    CoderMVP
        9
    CoderMVP  
       2020-05-06 23:39:24 +08:00 via iPhone   1
    早就关注楼主了,来支持
    glumess
        10
    glumess  
    OP
       2020-05-06 23:39:30 +08:00
    @OneMan 我也不是特别清楚,要看看 AVFoudation 支不支持了
    glumess
        11
    glumess  
    OP
       2020-05-06 23:40:00 +08:00
    @CoderMVP 感谢支持
    xylxAdai
        12
    xylxAdai  
       2020-05-06 23:44:00 +08:00
    不错不错,感谢分享。有推荐的类似 chromium 的 MSE 机制的音视频项目推荐吗,直接看 chromium 的内核实现有点脑壳疼
    lerp
        13
    ler  
    PRO
       2020-05-06 23:49:41 +08:00 via Android
    已关注
    glumess
        14
    glumess  
    OP
       2020-05-06 23:56:47 +08:00
    @xylxAdai chromium 的 MSE 机制 这个还不太会呢
    fzz
        15
    fzz  
       2020-05-07 00:42:17 +08:00 via Android
    改天关注。
    Marshall9527
        16
    Marshall9527  
       2020-05-07 09:53:02 +08:00
    @BenX 同搞 WebRTC 方向
    glumess
        17
    glumess  
    OP
       2020-05-07 10:04:13 +08:00
    @fzz 下次一定
    GaoMjun
        18
    GaoMjun  
       2020-05-07 10:17:06 +08:00
    kylix
        19
    kylix  
       2020-05-07 10:29:36 +08:00
    收藏备用~~~
    twoconk
        20
    twoconk  
       2020-05-07 11:21:33 +08:00
    开始以为的 WebRTC 、FFmpeg 呢,正好也做这块,平时在 https://it3q.com 记点笔记,有兴趣同学关注
    glumess
        21
    glumess  
    OP
       2020-05-07 11:37:12 +08:00
    @GaoMjun 大佬,敬佩
    huruwo
        22
    huruwo  
       2020-05-08 09:08:46 +08:00
    芜湖起飞
    现在是 Android 开发问下 想深入到音视频不知道市场行情支不支持转
    glumess
        23
    glumess  
    OP
       2020-05-08 10:30:40 +08:00
    @huruwo 多学点技能总是好的,出现技术和工作经历不匹配就尴尬了
    wlanjie888
        24
    wlanjie888  
       2020-05-20 14:27:37 +08:00
    推荐一个我写的 Android 的短视频 SDK https://github.com/wlanjie/trinity
    包含了音视频的大部分功能,是一个比较不错的学习项目
    glumess
        25
    glumess  
    OP
       2020-05-20 16:33:51 +08:00
    @wlanjie888 太流弊了,大佬
    wlanjie888
        26
    wlanjie888  
       2020-05-20 16:57:54 +08:00
    @glumess 大家一起学习
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1067 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 20ms UTC 18:10 PVG 02:10 LAX 10:10 JFK 13:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86