目录

点击视频播放按钮后长时间初始化

问题现象

点击视频播放按钮,视频长时间处于初始化状态,无法操作滑动进度条等。

背景知识

问题定位

  1. 使用ArkUI Inspector可以看到视频初始化过程中的加载组件名为LoadingProgress。

  2. 使用DevEco Profiler Frame模板抓取从点击播放按钮到视频开始播放的Trace,搜索关键字H:DispatchTouchEvent XXX type=1作为起始时间。

    搜索最后一次关于LoadingProgress渲染的Trace点H:FrameNode[LoadingProgress]作为结束时间。

    可以看到在此时间范围内应用包名主线程并无耗时过长的Trace点,可以排除应用主线程阻塞导致的耗时。

  3. 查看media_service泳道中PlayerEngine子泳道,可以明显看到16s多的耗时点,耗时主要集中在H:ffmpeg_init,ffmpeg_init是应用对资源进行解封装初始化。
  4. 根据背景知识中对解封装初始耗时原因的介绍,重点分析数据申请耗时。因为在不同网络环境下可复现问题,故排除网络环境差导致的耗时问题。

    在HiLog中搜索content-type|content-range:

    8179: 07-17 10:55:46.645  1541 34079 I C02B23/media_service/HiStreamer: (HandleContentType(), 873): content-type:  video/mp4
    8182: 07-17 10:55:46.645  1541 34079 I C02B23/media_service/HiStreamer: (HandleRange(), 935): content-range:  bytes 0-8191/11319147656

    根据搜索结果content-type:video/mp4、content-range:bytes 0-8191/11319147656可知资源是11G左右大小的mp4,对头部数据要求很大。

    在HiLog中搜索http buffer is enough|NotifyInitializationCompleted:

    25604: 07-17 10:56:03.157  1541 34079 I C02B23/media_service/HiStreamer: (HandleBuffering(), 288): HTTP Buffer is enough, bufferSize:15284 waterLineAbove: 4096 avgDownloadSpeed: 21132934.131737
    25629: 07-17 10:56:03.166  1541 34079 I C02B23/media_service/HiStreamer: (HandleBuffering(), 288): HTTP Buffer is enough, bufferSize:6404 waterLineAbove: 4096 avgDownloadSpeed: 21132934.131737
    25679: 07-17 10:56:03.177  1541 34079 I C02B23/media_service/HiStreamer: (HandleBuffering(), 288): HTTP Buffer is enough, bufferSize:12204 waterLineAbove: 4096 avgDownloadSpeed: 21132934.131737
    25693: 07-17 10:56:03.187  1541 34079 I C02B23/media_service/HiStreamer: (HandleBuffering(), 288): HTTP Buffer is enough, bufferSize:7744 waterLineAbove: 4096 avgDownloadSpeed: 21132934.131737
    25701: 07-17 10:56:03.214  1541 34079 I C02B23/media_service/HiStreamer: (HandleBuffering(), 288): HTTP Buffer is enough, bufferSize:19424 waterLineAbove: 4096 avgDownloadSpeed: 21132934.131737
    26349: 07-17 10:56:04.310  1541 34074 I C02B3A/media_service/FfmpegDemuxerPlugin: (NotifyInitializationCompleted(), 1024): Large init size 41152121

    根据搜索结果,Large init size 41152121是指需加载41152121bytes的头部数据才会开始播放,avgDownloadSpeed: 21132934.131737是指下载速度大约为21132934bps换算后是2.5M/s左右,根据资源大小和下载速度可以计算得出头部数据下载时间在16s左右,因此会长时间处于初始化阶段。

分析结论

资源文件是过大的mp4,因此初始化阶段的头部数据很大,下载耗时,故长时间初始化。

修改建议

  1. 适当调整视频分辨率和码率,对视频进行压缩处理。
  2. 长视频分割为多段时长适中的视频,减少初始化阶段数据下载量。