Skip to content

DataProvider

贾俊辉 edited this page Mar 14, 2019 · 3 revisions

数据提供者,DataProvider是为了播控的统一以及使用上的优雅而设计的。

在开发中,我们可能会遇到如下场景:你拿到的数据源可能只是个id之类的标识,并不是能直接播放的uri或者url,需要你再用这个id去请求一个接口才能拿到播放的源地址。通常我们都是先去请求接口,然后在成功回调中用拿到的源数据再设置给播放器去播放。

DataProvider的设计就是为了将此过程独立出来包装为一个数据提供者(其实也可以叫数据生产者),拿到数据后发送出去即可。而您只需要把那个id标识给DataProvider即可,接下来的过程就由DataProvider来完成了。DataProvider的具体实现需要由用户完成。

public class MonitorDataProvider extends BaseDataProvider {
    //...
    public MonitorDataProvider(){
        //...
    }
    
    @Override
    public void handleSourceData(DataSource sourceData) {
        this.mDataSource = sourceData;
        //...provider start
        onProviderDataStart();
        //...
        //...将数据回调出去
        onProviderMediaDataSuccess(bundle);
        //...
        //...异常时
        onProviderError(-1, null)
    }
    //...
    @Override
    public void cancel() {
        //...cancel something
    }
    @Override
    public void destroy() {
        //...destroy something
    }
}

使用DataProvider

mVideoView.setDataProvider(new MonitorDataProvider());
mVideoView.setDataSource(mDataSource);
mVideoView.start();

注意: 数据提供者必须要设置在启动播放前。