如何用ijkplayer使用改变清晰度功能(切换码流)

ff_ffplay.c:read_thread()
choose your like video stream id from ic->nb_streams set to st_index[AVMEDIA_TYPE_VIDEO]

自适应码率切换需要服务器端和客户端同时支持,首先服务器端需要提供多码率的码流,对HLS来说,就是需要服务器端提供master m3u8 playlist,也就是通常所说的嵌套m3u8;对Dash来说,manifest文件AdaptationSet里面会包含多个Representation,每个Representation对应某一个码率的流的描述。

在服务器端满足了上述条件之后,播放器通常来说需要如下四步完成自适应码率的切换,分别为:
1.带宽估计
2.切换时机和条件
3.Buffer数据切换
4.无缝切换

Android 硬解情况下 sps/pps变化时重启解码器继续播放 by guoshaobing66 · Pull Request #5385 · bilibili/ijkplayer · GitHub

ijkplayer 播8K视频卡顿 · Issue #4775 · bilibili/ijkplayer · GitHub

    if (!ffp->audio_disable)
        st_index[AVMEDIA_TYPE_AUDIO] =
            av_find_best_stream(ic, AVMEDIA_TYPE_AUDIO,
                                st_index[AVMEDIA_TYPE_AUDIO],
                                st_index[AVMEDIA_TYPE_VIDEO],
                                NULL, 0);

粗暴直接的做法就是你想同时解码 N 路音轨,就开 N 个 audioq,N 个 sampq,N 个 audio decode thread。
更加优雅的,效率更高的没有仔细考虑过。

按优酷做法,可以音频单独播放,这样视频音频分离没有耦合。视频可以全局时钟同步。

ijkplayer 0.6.0 enable resolution change 代码研究_Czach的博客-CSDN博客

你可能感兴趣的:(流媒体,ijkplayer,服务器,运维)