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

请教一下当前大厂短视频 app 是用 ffmpeg 在安卓转码的么?

  •  
  •   fyooo · 2020-08-07 11:52:41 +08:00 · 8583 次点击
    这是一个创建于 1351 天前的主题,其中的信息可能已经有所发展或是发生改变。
    没有做过这块,想学习一下,看官方文档是 MediaCodec,https://developer.android.com/reference/android/media/MediaCodec

    但是后台转码貌似都是 ffmpeg 的天下,然后发现安卓也可以搞 ffmpeg https://github.com/tanersener/mobile-ffmpeg

    有大佬知道当前业界的方案么?
    28 条回复    2021-02-08 11:14:30 +08:00
    learningman
        1
    learningman  
       2020-08-07 12:25:27 +08:00
    转码不是放在本地的吧。。。
    wysnylc
        2
    wysnylc  
       2020-08-07 12:26:14 +08:00
    阿里媒体处理,自己转码是不是闲后期升级不够麻烦呀
    mikumkf
        3
    mikumkf  
       2020-08-07 12:46:51 +08:00
    不是
    fyooo
        4
    fyooo  
    OP
       2020-08-07 14:10:34 +08:00
    @learningman 理论上手机拍的视频 raw 体积很大,需要先转码一次再发送到后台吧?
    blueaurora
        5
    blueaurora  
       2020-08-07 14:17:05 +08:00   ❤️ 1
    是的,ffmpeg 手机上可以弄到几 M,手机上压缩大小都是用它。早期斗音也是这么干的,但快手对 ffmpeg 工程的积累很深,他们不是直接用 ffmpeg 的
    blueaurora
        6
    blueaurora  
       2020-08-07 14:18:09 +08:00   ❤️ 1
    android 手机上,把 ffmpeg 弄成 so, 然后在 android 里,用 java 调用 ffmpeg 命令
    hoyixi
        7
    hoyixi  
       2020-08-07 14:21:33 +08:00
    服务器端处理,比如国内肯定有敏感过滤,然后各种存储策略,比如分片,比如音频视频分离
    learningman
        8
    learningman  
       2020-08-07 14:23:09 +08:00
    @fyooo 手机能拍 RAW 吗。。。只有那些顶级电影机才能拍 RAW 的,手机本身已经是输出 h264,h265
    takemeaway
        9
    takemeaway  
       2020-08-07 14:28:31 +08:00   ❤️ 1
    大部分都是,FFmpeg 是成熟的转码和视频处理插件。
    zhiyzellda
        10
    zhiyzellda  
       2020-08-07 14:34:58 +08:00 via Android
    @fyooo
    没看懂想要问什么。。。
    手机拍的视频如果转码了就会降低视频质量,如果不想降低质量,那转码后的视频只会比转码前的视频更大。转码一次再发到后台,后台负担更大吧。
    我个人很讨厌把视频压缩得不能看的行为。

    应该是原画传到服务器端,服务器端进行转码,例如原画是 1080P,服务器可以压缩它变成 480P 或者 240P 。播放的时候你需要 480P,服务器就把转码完成的 480P 发给你。
    wanacry
        11
    wanacry  
       2020-08-07 14:36:35 +08:00
    国内商业带宽太贵
    hahahahaha234
        12
    hahahahaha234  
       2020-08-07 14:47:43 +08:00
    @learningman 当年我的 htc m10 可以拍 RAW 照片哈
    learningman
        13
    learningman  
       2020-08-07 16:17:14 +08:00
    @hahahahaha234 RAW 照片和视频不是一个概念。。。
    em70
        14
    em70  
       2020-08-07 16:21:50 +08:00
    涉及多媒体数据处理几乎全是 ffmpeg,压制一定放云端,用户可以接受异步,前端技术难度大,体验也不好
    liwl
        15
    liwl  
       2020-08-07 16:26:24 +08:00
    @wanacry 上传到服务商不贵 你从服务商那数据才贵
    lwlizhe
        16
    lwlizhe  
       2020-08-07 16:32:36 +08:00
    额,我是刚刚学音视频,可能理解不到位哈……想问各位大佬

    这种情况下为啥需要转码呢,客户端直接编码扔给服务端不就行了么…………

    我个人理解中,转码的作用是为了适应不同情况下做的操作,所以应该是服务端去做的事,转好码以后分发给需要这个码的客户端,然后客户端再解码播放出来
    tusik
        17
    tusik  
       2020-08-07 16:39:51 +08:00
    @lwlizhe 需要考虑客户端的成本,上传时间太久了用户是肯定不接受的。需要一个折中的码率
    lwlizhe
        18
    lwlizhe  
       2020-08-07 16:44:54 +08:00
    @tusik 我直接把 YUV 数据编为我需要的码不就行了么……只需要一个编码操作,为啥还需要再加上转码?那不更耗时么……
    lwlizhe
        19
    lwlizhe  
       2020-08-07 16:50:55 +08:00
    @tusik 噢噢噢噢噢噢,我看到楼主的回复了……突然明白了楼主为啥有这个疑惑……

    raw 应该是容器格式吧……所以如果直接传输一个已经经过了编码封装的文件,那确实需要解封装,解码,转码,编码,封装这一套……

    不过我学到的那部分好像是直接拿到 YUV 源数据,并对其进行编码封装……所以才没楼主这个疑惑点
    fgodt
        20
    fgodt  
       2020-08-07 16:53:08 +08:00   ❤️ 1
    短视频 app 都是直接录制成合适的码率了,没有所谓的转码。但是这里面会用到 ffmpeg 和 mediacodec/videotoolbox opengles
    大概是流程 camera->perview->opengles->mediacodec/videotoolbox->ffmpeg->video
    lwlizhe
        21
    lwlizhe  
       2020-08-07 16:55:44 +08:00   ❤️ 2
    楼主之所以这个疑惑,我感觉是跟我一样刚入门的原因……

    raw 在音视频中,跟 mp4,3gp 那些一样,是一个容器封装格式,H264,这种才是编码格式,YUV 这个是视频源数据格式,非常之巨大,所以需要进行编码,后面再封装为 raw,3gp,mp4 这种文件,这样才是我们最常见到的文件

    回规正题

    感觉抖音 app 应该是直接拿到 YUV 源数据,并对其直接编码,封装,丢给服务端,不需要转码
    blueaurora
        22
    blueaurora  
       2020-08-07 21:54:16 +08:00   ❤️ 1
    app 把视频上传时,就需要压缩了,否则一个视频那么大哪受得了。 其实抖音开始上传的视频分辨率都不高的,这里有一个在分辨率不高的情况下,如何让视频更清晰的问题。相机采集的数据就是 YUV 的,然后本地加滤镜之后,剪裁大小、并生成基于 h264 的 mp4, 再把 mp4 用 ffmpeg 压缩一下,上传给后端
    fansangg
        23
    fansangg  
       2020-08-08 02:10:58 +08:00
    mediacodec
    chihiro2014
        24
    chihiro2014  
       2020-08-08 11:52:46 +08:00
    先转码一次,不然的话对面服务器带宽撑不住的。如果全民这么搞
    yhx5768
        25
    yhx5768  
       2020-08-08 12:30:06 +08:00
    解压下 apk 看下 lib 里有没有 ffmpeg 相关 so 就知道了
    janus77
        26
    janus77  
       2020-08-08 12:53:08 +08:00
    如果你是上传视频的话,那拍摄本身就包含了限定格式,这个可以当成广义上的转码
    如果你是下载视频播放,那么一般是在服务器做的,毕竟有缓存可以做到几乎不占用带宽。
    直播推拉流的话,一般是服务端来做
    wxjer
        27
    wxjer  
       2020-08-14 15:22:45 +08:00
    还可以试试 RxFFmpeg
    DingSoung
        28
    DingSoung  
       2021-02-08 11:14:30 +08:00 via iPhone
    某产品做摄像机是用的 Ffmpeg
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1229 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:51 · PVG 01:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.