当前位置:   article > 正文

ExoPlayer 的小解析_com.google.android.exoplayer2.exoplayerfactory

com.google.android.exoplayer2.exoplayerfactory

前言

     随着近年来,网络技术的飞速发展,视频能满足用户的视觉效果和声音的传达;市面上越来越多的app 可以进行视频播放,其中视频格式多种多样:如avi ,mp4,m3u8,rmvb等;类型又分为视频直播(hls,rstp,rtmp...)和非直播(3gp,mp4,avi ...)。其中这俩种我都项目中都接触了,且一入坑就是2年.作为android开发者, 一个好用的开源播放器插件  可以事半功倍 ,一石二鸟 。ExoPlayer 特别好用,  特别好理解里面代码逻辑, 特别好针对性界面开发。

结构介绍 

    ExoPlayer是一个应用程序级的媒体播放器的Android。它提供了一种替代的Android API的MediaPlayer播放音频和视频当在联网时。ExoPlayer支持目前不支持Android的MediaPlayer API功能,包括DASH 和smoothstreaming自适应回放。

打开 开源项目地址


分别为:

all -注册的AndroidManifest.xml

core-核心处理逻辑

dash-处理dash 流媒体逻辑

hls-处理hls流媒体逻辑

smoothstreaming-处理smoothstreaming逻辑

ui-处理界面的业务

快速开始

1.build.xml添加
   compile 'com.google.android.exoplayer:exoplayer:r2.3.0'
2.layout.xml 添加

  1. <com.google.android.exoplayer2.ui.SimpleExoPlayerView
  2. android:id="@+id/simpleExoPlayerView"
  3. android:layout_gravity="left|top"
  4. android:layout_centerInParent="true"
  5. android:layout_width="fill_parent"
  6. android:layout_height="fill_parent"
  7. />

3.主要Activity 

  1. package com.example.test_ijk;
  2. import android.content.Context;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import com.google.android.exoplayer2.DefaultLoadControl;
  7. import com.google.android.exoplayer2.ExoPlayerFactory;
  8. import com.google.android.exoplayer2.LoadControl;
  9. import com.google.android.exoplayer2.SimpleExoPlayer;
  10. import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
  11. import com.google.android.exoplayer2.extractor.ExtractorsFactory;
  12. import com.google.android.exoplayer2.source.ExtractorMediaSource;
  13. import com.google.android.exoplayer2.source.MediaSource;
  14. import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
  15. import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
  16. import com.google.android.exoplayer2.trackselection.TrackSelection;
  17. import com.google.android.exoplayer2.trackselection.TrackSelector;
  18. import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
  19. import com.google.android.exoplayer2.upstream.DataSource;
  20. import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
  21. import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
  22. import com.google.android.exoplayer2.util.Util;
  23. /**
  24. * android google exoplay
  25. */
  26. public class MainActivity extends AppCompatActivity {
  27. String url="";
  28. MediaSource videoSource;
  29. SimpleExoPlayer player ;
  30. Context context;
  31. @Override
  32. protected void onCreate(Bundle savedInstanceState) {
  33. super.onCreate(savedInstanceState);
  34. context=MainActivity.this;
  35. setContentView(R.layout.activity_main);
  36. // 1.创建一个默认TrackSelector
  37. DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
  38. TrackSelection.Factory videoTrackSelectionFactory =
  39. new AdaptiveTrackSelection.Factory(bandwidthMeter);
  40. TrackSelector trackSelector =
  41. new DefaultTrackSelector(videoTrackSelectionFactory);
  42. // 2.创建一个默认的LoadControl
  43. LoadControl loadControl = new DefaultLoadControl();
  44. DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
  45. Util.getUserAgent(context, "yourApplicationName"), bandwidthMeter);
  46. ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
  47. url="http://mpv.videocc.net/ce0812b122/a/ce0812b122bf0fb49d79ebd97cbe98fa_1.mp4";
  48. //test mp4
  49. videoSource = new ExtractorMediaSource(Uri.parse(url),
  50. dataSourceFactory, extractorsFactory, null, null);
  51. // 3.创建播放器
  52. player = ExoPlayerFactory.newSimpleInstance(context,trackSelector,loadControl);
  53. SimpleExoPlayerView simpleExoPlayerView= (SimpleExoPlayerView) findViewById(R.id.simpleExoPlayerView);
  54. // 将player关联到View上
  55. simpleExoPlayerView.setPlayer(player);
  56. player.prepare(videoSource);
  57. // Prepare the player with the source.
  58. }
  59. @Override
  60. protected void onDestroy() {
  61. super.onDestroy();
  62. player.release();
  63. }
  64. }


个人亲测:HLS 和MP4均测试无问题;



源码赏析

1.SimpleExoPlayerView继承了FrameLayout



2.ExtractorMediaSource 实现android 原生mediosource,listenr;


3.ExoPlayerImpl是ExoPlayer实现类


4.SimpleExoPlayer 视频播放主要处理类



总结

ExoPlayer 作为谷歌官方出品,嵌入简单,可移值性强,且已经衍生到2.3 版本,后续也会更新,相信大家对它也会充满信心。
语文不是很好,有问题可以提出,看到必回,讲我知道的,一起讨论不知道的。







声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/299288
推荐阅读
相关标签
  

闽ICP备14008679号