exoplayer实测播放dash流(二) dash+drm widevine加密流

匿名 (未验证) 提交于 2019-12-03 00:19:01

一、前提

exoplayer的集成和使用一


二、相关API的调用

public class MyApplication extends Application {     protected String userAgent;      @Override     public void onCreate() {         super.onCreate();         userAgent = Util.getUserAgent(this, "ExoPlayer2018");     }      public DataSource.Factory buildDataSourceFactory(TransferListener<? super DataSource> listener)     {         return new DefaultDataSourceFactory(this, listener, buildHttpDataSourceFactory(listener));     }      public HttpDataSource.Factory buildHttpDataSourceFactory(TransferListener<? super DataSource> listener)     {         return new DefaultHttpDataSourceFactory(this.userAgent, listener);     }  }

public class PlayerActivity extends Activity {      private String TAG="exo2018";     private DefaultBandwidthMeter BANDWIDTH_METER  = new DefaultBandwidthMeter();;     private DefaultDataSourceFactory defaultDataSourceFactory;     private Handler mHandler;     private PlayerView pv_view;     private DefaultTrackSelector trackSelector;     //认证地址     private String license_url="https://hk.cnv8.tv:9900/drm/index.php";     private SimpleExoPlayer mPlayer;     //无加密播放地址     private String url="https://hk.cnv8.tv:9900/dash/live/index.mpd";     private String url2="http://183.59.160.61:30001/PLTV/88888905/224/3221227518/index.m3u8";     @Override     protected void onCreate(@Nullable Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_play);         Log.i(TAG,"oncreate");         initView();         Intent intent = getIntent();          defaultDataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "PlayerDash_widevine"), (TransferListener) this.BANDWIDTH_METER);         mHandler = new Handler();      }      private void initView() {         Log.i(TAG,"initview");         pv_view = findViewById(R.id.pv_view2);     }       @Override     protected void onStart() {         super.onStart();         Log.i(TAG,"onstart");         initPlayer();     }      /**      * 初始化player      */     private void initPlayer() {         TrackSelection.Factory trackSelectionFactory=new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);         trackSelector = new DefaultTrackSelector(trackSelectionFactory);          if (!"".equals(license_url))             try             {                 DrmSessionManager localDrmSessionManager = buildDrmSessionManagerV18(C.WIDEVINE_UUID,license_url, null, false);             }             catch (UnsupportedDrmException localUnsupportedDrmException)             {                 localUnsupportedDrmException.printStackTrace();             }          //工厂模式下新建一个player         mPlayer = ExoPlayerFactory.newSimpleInstance(this,trackSelector);         //view绑定player         pv_view.setPlayer(mPlayer);         //自动播放         mPlayer.setPlayWhenReady(true);          DefaultDashChunkSource.Factory localFactory = new DefaultDashChunkSource.Factory(defaultDataSourceFactory);         //使用对应的库播放对应的流         DashMediaSource dashMediaSource = new DashMediaSource(Uri.parse(url), defaultDataSourceFactory, localFactory, null, null);          //进入prepare状态         mPlayer.prepare(dashMediaSource);     }      @Override     protected void onResume() {         super.onResume();         Log.i(TAG,"onresume");     }      @Override     protected void onPause() {         super.onPause();         Log.i(TAG,"onpause");     }      @Override     protected void onDestroy() {         super.onDestroy();         Log.i(TAG,"ondestory");          releasePlayer();     }      /**      * 释放资源      */     private void releasePlayer() {          if(mPlayer!=null){             mPlayer.release();             mPlayer=null;             trackSelector=null;         }     }      private DrmSessionManager<FrameworkMediaCrypto> buildDrmSessionManagerV18(UUID paramUUID, String paramString, String[] paramArrayOfString, boolean paramBoolean)             throws UnsupportedDrmException     {         HttpMediaDrmCallback localHttpMediaDrmCallback = new HttpMediaDrmCallback(paramString, buildHttpDataSourceFactory(false));         int i = 0;         if (paramArrayOfString != null)             while (i < -1 + paramArrayOfString.length)             {                 localHttpMediaDrmCallback.setKeyRequestProperty(paramArrayOfString[i], paramArrayOfString[(i + 1)]);                 i += 2;             }         DefaultDrmSessionManager localDefaultDrmSessionManager = new DefaultDrmSessionManager(paramUUID, FrameworkMediaDrm.newInstance(paramUUID), localHttpMediaDrmCallback, null,mHandler, new DefaultDrmSessionManager.EventListener()         {             public void onDrmKeysLoaded()             {             }             public void onDrmKeysRemoved()             {             }             public void onDrmKeysRestored()             {             }             public void onDrmSessionManagerError(Exception paramException)             {             }         });         return localDefaultDrmSessionManager;     }     private HttpDataSource.Factory buildHttpDataSourceFactory(boolean paramBoolean)     {         MyApplication localDemoApplication = (MyApplication)getApplication();         DefaultBandwidthMeter localDefaultBandwidthMeter;         if (paramBoolean)             localDefaultBandwidthMeter = BANDWIDTH_METER;         else             localDefaultBandwidthMeter = null;         return localDemoApplication.buildHttpDataSourceFactory(localDefaultBandwidthMeter);     } }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!