ExoPlayer로 기본 앱을 제작하는 데 어려움을 겪고 있습니다.Google ExoPlayer 가이드
답변
먼저 당신은 당신의 build.gradle에
컴파일이를 추가해야 'exoplayer : com.google.android.exoplayer r2.1.1'
1. 레이아웃 파일을
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/player_view"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
2. 클래스 파일
public class ExoPlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {
SimpleExoPlayer player;
String path; // it can be url of video for online streaming or a url of local video
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exoplayer);
// set your path here
path=<your path>;
// 1. Create a default TrackSelector
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 playerView = (SimpleExoPlayerView) findViewById(R.id.player_view);
playerView.setPlayer(player);
playerView.setKeepScreenOn(true);
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "ExoPlayer"));
// Produces Extractor instances for parsing the media data.
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
// This is the MediaSource representing the media to be played.
MediaSource videoSource = new ExtractorMediaSource(Uri.parse(path),
dataSourceFactory, extractorsFactory, null, null);
// Prepare the player with the source.
player.addListener(this);
player.prepare(videoSource);
playerView.requestFocus();
player.setPlayWhenReady(true); // to play video when ready. Use false to pause a video
}
@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
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 ExoPlayer.STATE_BUFFERING:
//You can use progress dialog to show user that video is preparing or buffering so please wait
break;
case ExoPlayer.STATE_IDLE:
//idle state
break;
case ExoPlayer.STATE_READY:
// dismiss your dialog here because our video is ready to play now
break;
case ExoPlayer.STATE_ENDED:
// do your processing after ending of video
break;
}
}
@Override
public void onPlayerError(ExoPlaybackException error) {
// show user that something went wrong. I am showing dialog but you can use your way
AlertDialog.Builder adb = new AlertDialog.Builder(ExoPlayerActivity.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() {
//Video is not streaming properly
Log.d("Mayur", "Discontinuity");
}
@Override
protected void onDestroy() {
super.onDestroy();
player.release(); //it is important to release a player
}
}
초보자들에게는 충분하다고 생각합니다. 또한이 라이브러리의 표준 오디오 및 비디오 구성 요소는 Android 4.1 (API 레벨 16)에서 출시 된 Android의 MediaCodec API를 사용합니다. 그래서 안드로이드 4.0 이하에서는 작동하지 않습니다.
고마워, 이건 정말 도움이! :) – hogar
Perfect, 정확히 내가 한 시간 이상 웹에서 찾고있는 것입니다. 나는 이제 막 포기했다. 이 샘플은 비디오 및 오디오 모두에 대한 매력처럼 작동합니다. 매니페스트에
'com.google.android.exoplayer2.ui.SimpleExoPlayerView' 대신'Exoplayer'를 맞춤 동영상 화면과 함께 사용할 수 있습니까? 내 질문에 https://stackoverflow.com/questions/48920678/exoplayer-how-to-know- 사용자 지정 비디오보기로 재생할 url –
ExoPlayer를 구현하는 동안 어려움을 겪고 있습니다. – Mrinmoy
안녕하세요. "시작"부분에 문제가 있습니다. 비디오 나 스트림을 재생하기 위해 무엇을 사용해야하는지 모릅니다. 멈추고, 놀고, 멈추는 법 ... 또 다른 문제는'DefaultDataSourceFactory' 생성자에서 내가 제공하는 것을 모른다는 것입니다. 전체 사용법과 혼동 ... 제발 도와주세요! 감사! – hogar
https://github.com/google/ExoPlayer, git에서 데모 애플리케이션을 다운로드 받아 그대로 가져옵니다. 예제를 실행하고 코드를 탐색하십시오. 응용 프로그램을 실행하는 동안 문제가 발생하면 언제든지 의견을 말하십시오 ... !! – Mrinmoy