请教一下当前大厂短视频 app 是用 ffmpeg 在安卓转码的么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyooo
V2EX    Android

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

  •  
  •   fyooo 2020-08-07 11:52:41 +08:00 16191 次点击
    这是一个创建于 1905 天前的主题,其中的信息可能已经有所发展或是发生改变。
    没有做过这块,想学习一下,看官方文档是 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 就知道了
    rb6221
        26
    rb6221  
       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     Solana     865 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:39 PVG 06:39 LAX 15:39 JFK 18:39
    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