android HLS Nuplayer分析

由一个问题引起的read the source code。

在使用android的mediaplayer点播m3u8时,有这样一个问题,播放一会 按home之后再回来播放时,视频是从头开始播放而无法从上次的位置播放。

在应用层是调用getcurrnetpositon 来保持位置,再次播放调用seekTo。

读NUPlayer的实现,重点关注NUPlayer中seekTo的实现,下面是seekTo的调用

1 LiveSession.cpp :: seekTo(...)

---> new AMessage(kWhatSeek)

--->onMessageReceived(...)

------->kWhatSeek->onSeek

2  LiveSession.cpp::onSeek(...)

--->fetchPlayList(...)

---->changeConfiguration(...)

3LiveSession.cpp::changeConfiguration()

-->changeConfiguration2(...)

4LiveSession.cpp::changeConfiguration2(...)

-->changeConfiguration3(..)

5 LiveSession.cpp::changeConfiguration3(...)

--->fetcher->startAsync(..)

6 PlayListFetcher::startAsync(...)

--->send kWhatStart msg

7 PlayListFetcher::onStart(...)

---->postMonitorQueue(...)

8 PlayListFetcher::postMonitorQueue()

-->send message ... onMonitorQueue(...)

9 PlayListFetcher:: onMonitorQueue(...)

--->onDownloadNext(...)

省略细节到这里有两个关键的部分mSession->fetchPlaylist和mSession->fetchfile,

fetchPlaylist是解析M3u文件,取到playlist(个人称它是ts文件集)及每个ts的信息等完成后会返回一个M3Uparser的指针,fetchfile是获取uri中的ts文件

其中参数range-offset和range-length 是根据之前 M3Uparser::parses解析m3u文件的#EXT-X-BYTERANGE这个tag获得时间去确定的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值