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

2020-08-07 11:52:41 +08:00
 fyooo
没有做过这块,想学习一下,看官方文档是 MediaCodec,https://developer.android.com/reference/android/media/MediaCodec

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

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

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

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

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX