开始使用ExoPlayer的最简单方法是将其添加为gradle依赖项.您需要确保在项目的根目录中的build.gradle文件中包含jcenter存储库:

存储库{

jcenter()

}

接下来,在模块的build.gradle文件中包含以下内容:

编译’com.google.android.exoplayer:exoplayer:r2.2.0′

1.您的布局文件

android:id="@+id/activity_main"

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/player_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:focusable="true"

app:resize_mode="fill"/>

android:id="@+id/progressBar"

style="?android:attr/progressBarStyle"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:visibility="gone"/>

2.你的班级档案(活动)

public class VideoPlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {

private SimpleExoPlayerView simpleExoPlayerView;

private String hlsVideoUri = "http://playertest.longtailvideo.com/adaptive/bbbfull/bbbfull.m3u8";

private SimpleExoPlayer player;

private ProgressBar progressBar;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_video_player);

// 1. Create a default TrackSelector

Handler mainHandler = new Handler();

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);

TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);

// 2. Create a default LoadControl

LoadControl loadControl = new DefaultLoadControl();

// 3. Create the player

player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player_view);

simpleExoPlayerView.setPlayer(player);

// Measures bandwidth during playback. Can be null if not required.

DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();

// Produces DataSource instances through which media data is loaded.

DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,

Util.getUserAgent(this, "Exo2"), defaultBandwidthMeter);

// Produces Extractor instances for parsing the media data.

ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();

// This is the MediaSource representing the media to be played.

HlsMediaSource hlsMediaSource = new HlsMediaSource(Uri.parse(hlsVideoUri), dataSourceFactory, mainHandler, new AdaptiveMediaSourceEventListener() {

@Override

public void onLoadStarted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs) {

}

@Override

public void onLoadCompleted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {

}

@Override

public void onLoadCanceled(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {

}

@Override

public void onLoadError(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded, IOException error, boolean wasCanceled) {

}

@Override

public void onUpstreamDiscarded(int trackType, long mediaStartTimeMs, long mediaEndTimeMs) {

}

@Override

public void onDownstreamFormatChanged(int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaTimeMs) {

}

});

player.addListener(this);

player.prepare(hlsMediaSource);

simpleExoPlayerView.requestFocus();

player.setPlayWhenReady(true);

progressBar = (ProgressBar) findViewById(R.id.progressBar);

}

@Override

public void onTimelineChanged(Timeline timeline, Object manifest) {

}

@Override

public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {

}

@Override

public void onLoadingChanged(boolean isLoading) {

}

@Override

public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {

switch (playbackState) {

case Player.STATE_BUFFERING:

//You can use progress dialog to show user that video is preparing or buffering so please wait

progressBar.setVisibility(View.VISIBLE);

break;

case Player.STATE_IDLE:

//idle state

break;

case Player.STATE_READY:

// dismiss your dialog here because our video is ready to play now

progressBar.setVisibility(View.GONE);

break;

case Player.STATE_ENDED:

// do your processing after ending of video

break;

}

}

@Override

public void onPlayerError(ExoPlaybackException error) {

AlertDialog.Builder adb = new AlertDialog.Builder(VideoPlayerActivity.this);

adb.setTitle("Could not able to stream video");

adb.setMessage("It seems that something is going wrong.\nPlease try again.");

adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

finish(); // take out user from this activity. you can skip this

}

});

AlertDialog ad = adb.create();

ad.show();

}

@Override

public void onPositionDiscontinuity() {

}

@Override

protected void onPause() {

super.onPause();

if (player != null) {

player.setPlayWhenReady(false); //to pause a video because now our video player is not in focus

}

}

@Override

protected void onDestroy() {

super.onDestroy();

player.release();

}

}

我认为这对初学者来说已经足够了.另请注意,此库的标准音频和视频组件依赖于Android的MediaCodec API,该API是在Android 4.1(API级别16)中发布的.因此它不适用于Android 4.0及更低版本.

不要忘记将此权限添加到清单文件中:

< uses-permission android:name =“android.permission.INTERNET”/>

android exoplayer 直播流,android – Exoplayer自适应hls流媒体相关推荐

  1. LiveNVR配置拉转RTSP传统海康大华安防摄像机直播流输出RTSP/RTMP/HLS/HTTP-FLV如何获取直播流地址

    LiveNVR配置拉转RTSP传统海康大华安防摄像机直播流输出RTSP/RTMP/HLS/HTTP-FLV如何获取直播流地址 1. Onvif/RTSP流媒体服务 2.配置拉转直播流 2.1 RTSP ...

  2. android 播放直播流,【报Bug】video组件播放直播流无法重连 android app

    详细问题描述 android app nvue页面使用video播放直播流视频(非普通在线视频),切换网络会导致视频一直缓冲无法继续播放,一直触发@error事件,只用用4g或者wifi均可正常播放, ...

  3. Android判断直播结束,Android 直播打断事件处理

    打断事件处理 1 简介 使用 ZegoLiveRoom SDK 直播过程中,可能会被来电.切后台等事件打断,此时开发者需要处理打断事件. SDK 提供了与音频打断事件相关的API,如下所示: /** ...

  4. android 图片文件流,Android 如何以流的方式读取图片文件

    在读取sdcard中的图片文件时,如何以流的方式读取图片文件,请参阅下面的函数: public static void ShowImg(String uri, ImageView iv) throws ...

  5. android 关闭直播视频,Android WebView无法播放视频或直播,关闭界面后任在播放的问题;...

    1.设置webview属性: webView.setWebChromeClient(new MyWebChromeClient()); webSettings = webView.getSetting ...

  6. android 横屏直播界面,Android安卓腾讯云互动直播随心播横屏的实现方式1.8.2

    研究过腾讯云互动直播的人,估计很心烦,这能横屏吗?官方说:暂时不支持.二线客户说,有人做出来了.但是 这东西到底怎么横屏呢? 鉴于笔者研究了一天时间,终于做出来了,发表一片博客,为在腾讯云中爬坑的人垫 ...

  7. android最新直播框架,Android直播类框架

    释放双眼,带上耳机,听听看~! 直播 KingTV jjdxm-ijkplayer 直播相关开源框架 compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0 ...

  8. Vue项目中播放直播流

    直播流播放协议 视频直播服务支出输出RTMP.FLV.HLS三种协议 阿里云视频直播 RTMP(Real Time Message Protocol:实时消息传输协议)延时低(1s~3s),TCP长连 ...

  9. php安卓直播抓取,hls,android_安卓大部分浏览器播放HLS协议直播流会从头开始,hls,android,ffmpeg,m3u8 - phpStudy...

    安卓大部分浏览器播放HLS协议直播流会从头开始 遇到的问题 HLS直播流在iOS系统中表现正常, 但在安卓使用大部分浏览器(UC浏览器除外)播放ffmpeg生成的HLS直播流都会发生从头播放的问题, ...

  10. android4.4 hls,Android VideoView直播电视流(HLS)

    我试图开发电视流(HLS)的应用程序.使用下面的代码我测试了2.3.3,3.0和4.0.1版Android设备上的流,但遇到了几个问题. 在Android 2.3.3上,播放时间大于1分钟,然后停止播 ...

最新文章

  1. idea 在tomcat中部署的时候 莫名其妙的错误
  2. Mac 开发中如何设置 关闭 以及最小化 最大化按钮事件处理
  3. C++一天一个程序(七)
  4. 很用心的为你写了 9 道 MySQL 面试题,建议收藏!
  5. python+requests接口测试基础
  6. SAP License:SAP学习笔记
  7. REPNZ SCANS
  8. winserver 08 64位安装sql05 64位提示asp版本注册
  9. python opencv 身份证照片识别,包含正面、反面(附完整代码,可直接使用)
  10. Newtonsoft.Json.dll 的使用
  11. 转载多线程下载(HTTPWebRequest)
  12. nosqlbooster pojie
  13. 总结SSL/TLS协议运行机制
  14. 《通天秘笈》学习笔记
  15. python取省边界_提取行政区边界经纬度坐标(高德+百度)
  16. 2012年华为杯校园编程大赛决赛 类别:软件C/C++语言
  17. 实验记录 | BWA的安装
  18. java微信扫码登录代码在这里
  19. 【暴力枚举】速算游戏 fun.pas/c/cpp
  20. DB-Engines 5月数据库排名:MySQL或将超越Oracle?

热门文章

  1. Java视频教程免费分享
  2. VS2005远程调试
  3. python开发移动app_手机python开发
  4. MyBatis-18MyBatis代码生成器-Example讲解
  5. vivado综合阶段部分IP报错--需要安装y2k22补丁包
  6. fedora 19 安装中文语言包
  7. IE主页简单篡改修复
  8. OpenCASCADE VS2010 SP1编译
  9. premiere cc2014破解版|premiere cc2014绿色破解版下载
  10. python找不到csv文件路径_无法识别csv的构造文件路径。但文件是