ijkplayer icon indicating copy to clipboard operation
ijkplayer copied to clipboard

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

Open QKunNO1 opened this issue 6 years ago • 9 comments

m3u8文件里已经有多个清晰度的m3u8地址了,如何切换设置切换呢,我看log是默认播放了第一个 #EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=355635,RESOLUTION=320x180 v.f210.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=633297,RESOLUTION=640x360 v.f220.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1188568,RESOLUTION=1280x720 v.f230.m3u8 #EXT-X-ENDLIST log显示上面不同码率的m3u8都下载一遍,然后只加载了第一个m3u8的ts流播放,如何切换呢

QKunNO1 avatar Aug 01 '18 10:08 QKunNO1

你好,这个解决了吗?应该是自适应的吧。你一级m3u8文件链接给我一下吧,我测试一下,我现在也用到这块,不清楚原理

zhaoyongjiang avatar Sep 15 '18 08:09 zhaoyongjiang

http://7xlv47.com1.z0.glb.clouddn.com/xxx004.m3u8 ,如果你实现了 可以告诉我。 我实现出来有问题 进度不对,调用seek了也不对

在 2018-09-15 16:36:18,"DaZend" [email protected] 写道:

你好,这个解决了吗?应该是自适应的吧。你一级m3u8文件链接给我一下吧,我测试一下,我现在也用到这块,不清楚原理

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

QKunNO1 avatar Sep 18 '18 11:09 QKunNO1

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

linjiansheng avatar Sep 19 '18 02:09 linjiansheng

这个其实就是切换track public ITrackInfo[] getTrackInfo() { if (mMediaPlayer == null) return null;

    return mMediaPlayer.getTrackInfo();
}

public void selectTrack(int stream) {
    MediaPlayerCompat.selectTrack(mMediaPlayer, stream);
}

public void deselectTrack(int stream) {
    MediaPlayerCompat.deselectTrack(mMediaPlayer, stream);
}

获取到track信息 然后selectTrack

sun804336516 avatar Dec 02 '19 03:12 sun804336516

如何设置到播放器根据网络情况自适应选择相应的分辨率进行切换呀

dluffymonkey avatar Mar 08 '21 08:03 dluffymonkey

有解决办法吗

GameKernel avatar Sep 15 '21 12:09 GameKernel

有人做过比较系统的解决方案吗?

peerless2012 avatar Nov 19 '21 07:11 peerless2012

视频分辨率由高到低的bandwith排列是:4190760 bit(4.2MB/s) ,2073921 bit(2.1 MB/s) , 869460 bit(0.9MB/s)....... 播放器每下载一些内容,都会计算当前的下载速度, 然后根据当前的下载速度,从最高的分辨率开始,一路遍历直到找到合适的视频文件。实现自适应码率

1976222027 avatar Jun 14 '22 02:06 1976222027

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

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

1976222027 avatar Jun 14 '22 02:06 1976222027