سلام
می خوام یه سری ویدیو رو از سایت روی موبایل نمایش بدم
اول اومدم از ویدیو پلیر خود اندروید استفاده کردم که سرعتش فوق العاده کند بود و بی خیالش شدم. بعد رفتم سراغ لایبرری های اماده که انگار بهترینشون ExoPlaye هستش و توسط گوگل پشتیبانی میشه . اون رو روی اپ م پیاده کردم منتها اکثر فرمت ها رو ساپورت نمی کرد.
میخواستم بدونم کسی تجربه کاری با این لایبرری رو داره که نمونه کد بزاره و یا اینکه لایبرری مشابه رو می شناسه که کار کردن هم باهاش راحت باشه
این هم نمونه کد من:
کد HTML:
import android.app.Dialog;
import android.net.Uri;
import android.os.Handler;
import android.view.SurfaceView;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.dash.DashMediaSource;
import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource;
import com.google.android.exoplayer2.trackselection.AdaptiveVideoTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.util.Util;
import hadafapp.chalaksoft.com.hadaf.R;
import hadafapp.chalaksoft.com.hadaf.activity.BaseActivity;
public class VideoPlayer
{
// private static final String VIDEO_URI =
// "http://hadafapp.com/up/1487449143video_2017-01-29_23-54-45.mov";
private String VIDEO_URI =
"http://www-itec.uni-klu.ac.at/ftp/datasets/DASHDataset2014/BigBuckBunny/4sec/BigBuckBunny_4s_onDemand_2014_05_09.mpd";
private SimpleExoPlayer player;
private SimpleExoPlayerView simpleExoPlayerView;
private Handler mainHandler;
private TrackSelection.Factory videoTrackSelectionFactory;
private TrackSelector trackSelector;
private LoadControl loadControl;
private DataSource.Factory dataSourceFactory;
private MediaSource videoSource;
private Uri uri;
private String userAgent;
private SurfaceView ss;
private static final DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
public VideoPlayer(String VIDEO_URI) {
this.VIDEO_URI=VIDEO_URI;
Dialog dialog=new Dialog(BaseActivity.activity,android.R.style.Theme_Black_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.video_player);
simpleExoPlayerView = (SimpleExoPlayerView) dialog.findViewById(R.id.dialog_player);
userAgent = Util.getUserAgent(BaseActivity.activity,"SimpleDashExoPlayer");
createPlayer();
attachPlayerView();
preparePlayer();
dialog.show();
final int BUFFER_SEGMENT_SIZE = 64 * 1024;
final int BUFFER_SEGMENT_COUNT = 256;
final int RENDERER_COUNT = 3;
// Uri uri = Uri.parse(VIDEO_URI);
//
// Allocator allocator = new DefaultAllocator(true,BUFFER_SEGMENT_SIZE);
// DataSource dataSource = new DefaultUriDataSource(this, null, getUserAgent(this, "ExoPlayerExample"));
//
// ExtractorSampleSource sampleSource = new ExtractorSampleSource(
// uri, dataSource, allocator, BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);
//
// MediaCodecVideoTrackRenderer videoRenderer = new MediaCodecVideoTrackRenderer(
// this, sampleSource, MediaCodecSelector.DEFAULT, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
// MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(
// sampleSource, MediaCodecSelector.DEFAULT);
// player = ExoPlayer.Factory.newInstance(RENDERER_COUNT);
//
// player.prepare(videoRenderer, audioRenderer, secondAudioRenderer);
// player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surfaceView.getHolder().getSurface());
// player.setPlayWhenReady(true);
}
// Create TrackSelection Factory, Track Selector, Handler, Load Control, and ExoPlayer Instance
public void createPlayer(){
mainHandler = new Handler();
videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
loadControl = new DefaultLoadControl();
player = ExoPlayerFactory.newSimpleInstance(BaseActivity.activity,trackSelector,loadControl);
}
// Set player to SimpleExoPlayerView
public void attachPlayerView(){
simpleExoPlayerView.setPlayer(player);
}
// Build Data Source Factory, Dash Media Source, and Prepare player using videoSource
public void preparePlayer(){
uriParse();
dataSourceFactory = buildDataSourceFactory(bandwidthMeter);
videoSource = new DashMediaSource(uri,buildDataSourceFactory(null),new DefaultDashChunkSource.Factory(dataSourceFactory),mainHandler,null);
player.prepare(videoSource);
}
// Parse VIDEO_URI and Save at uri variable
public void uriParse(){
uri = Uri.parse(VIDEO_URI);
}
// Build Data Source Factory using DefaultBandwidthMeter and HttpDataSource.Factory
private DataSource.Factory buildDataSourceFactory(DefaultBandwidthMeter bandwidthMeter){
return new DefaultDataSourceFactory(BaseActivity.activity, bandwidthMeter, buildHttpDataSourceFactory(bandwidthMeter));
}
// Build Http Data Source Factory using DefaultBandwidthMeter
private HttpDataSource.Factory buildHttpDataSourceFactory(DefaultBandwidthMeter bandwidthMeter){
return new DefaultHttpDataSourceFactory(userAgent, bandwidthMeter);
}
// Activity onStop, player must be release because of memory saving
public void onStop(){
player.release();
}
}