• 视频编解码类型调查——抖音客户端


    今天使用公司开发手机,调研一下当下很火的抖音客户端,其使用的视频编码类型。

    在调研前,有个初步判断:

    1.从抖音服务器推送到客户端的视频流要么是avc码流,要么是hevc码流(具体要视平台解码硬件支持情况,本地上传支持情况,云端再推来相应的码流)。

    2.本地客户端,解码器选择有三个,手机平台提供硬件解码器、Android提供的解码器、抖音平台提供的解码器。

       2.1.其使用优先级为硬件解码器排首位,后面的选择则不太确定,视哪个解码效率更高使用哪个。

       2.2.有些手机不带相应的硬件解码器(例如,如果推来的是hevc的流,不是近几年出的手机的话,一般不带hevc硬件解码器),则必须使用软件解码方式。

              具体使用的是安卓提供的,还是使用抖音提供的,要看哪个解码速度更快。

    3.有些视频做了保护而不能下载到本地,有办法获取视频吗?

       3.1.如果使用硬件解码器,则通过修改平台解码驱动源码,以替换平台解码库方式,可以拿到视频码流。

       3.2.如果走Android提供的DRM方式,对这种没用过,很可能无法拿到。

       3.3.如果走抖音提供的解码器,无法直接拿到码流,一种比较低效的方式是,解码后送平台显示模块,在显示模块拿yuv图(其实3.2也可以这么干)。

       3.4.另外一种方式是:拦截网卡收到的全部数据,根据hevc数据语法特征,对数据再进行再组装,但是这种非常费时费力。

    4.平台带硬件解码器前提下,在java上层,解码是走MediaCodec方式还是走MediaPlayer方式?

       4.1.走MediaPlayer方式跟普通播放器没多大区别(一点区别是抖音不提供快进快退的seek功能)。

             因为MediaPlayer一般是播放本地视频使用,内部已经做了demux-decode-render很多细节功能,但是由于网络传来的流,这个需要抖音根据协议自己做音视频分离,因此可能不是走这种通路。但是也不好说,毕竟安卓也支持rtsp流播放。

       4.2.走MediaCodec的话,需要两个MediaCodec实例来分别解码音频和视频,然后java层获取到解码后的数据后分别送audio/video输出通路。

    -----------------------------------------------------------------------------可爱的分割线-----------------------------------------------------------------------------------------

    手机硬件情况:带avc和hevc硬件解码器。

    测试结果:

    1.播放了30多个短视频,一直出现平台的hevc解码log信息,因此目前节点上抖音视频都用上了h265(后来其他调查,发现不一定是265视频流,自己的苹果手机上传的视频,再下载下来,变成了264编码码流)。

    2.只有一个手机,因自带硬件解码器,因此无法验证软解方式下,是使用安卓提供的还是抖音提供的。

    3.有办法获得码流。因为看到无法“保存到本地”的视频,仍在使用平台硬件解码器解码。

    4.从log中判断,使用了MediaCodec,未用MediaPlayer。

    其他信息:

    1.客户端的log路径在哪?用于出错时问题回溯。

    logcat方式没找到(douyin、bytedance相关关键词),lib库中看到包含libalog.so,应该是log生成相关,由于去掉了符号表,只能用winhex看二进制数据,也没看到有用信息。

    难道release版都把log关掉了?用户客户端出bug了,如何定位问题?

    另外一种方式查找,如果本地写log文件,那么应该使用了一些fd,于是看到了:

     但是,不幸的是,下载这些log文件,看不到可识别的字符串信息,应该是log做过加密处理,不希望别人看到。

    2.是否使用一些开源的东西?例如ffmpeg

    使用了!通过其提供的库可以看到:

     使用了x264视频编码库、ffmpeg多媒体框架、fdk-aac音频编码库、libyuv图形转换库、tensorflow机器学习库等。

    3.客户端包名:com.ss.android.ugc.aweme

    21:35:14.776  4551  4551 D BluetoothMapAppObserver: The installed package is: com.ss.android.ugc.aweme

    4.安装路径

    08-29 21:34:59.502  4269  4313 D PackageManager: New package installed in /data/app/com.ss.android.ugc.aweme-mCkAz35nMlxyL_FLCfX72Q==

    5.使用线程一览(太长就不贴全了):

  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/Dreaming-in-Gottingen/p/13583826.html
Copyright © 2020-2023  润新知