首页 文章

Exoplayer v2,直播视频流

提问于
浏览
1

我正在尝试用ExoPlayer替换视频视图,以便在我的应用中实时流式传输 .

我无法在ExoPlayer上找到任何用 videoView.setVideoURI("") 替换我的代码和实时视频实现的示例 .

任何人都可以帮忙吗?

谢谢

1 回答

  • 0

    add bellow compile to your gradle:

    //Video Playback library
    compile 'com.google.android.exoplayer:exoplayer:r2.5.+'
    

    Add below line to your xml file:

    <com.google.android.exoplayer2.ui.SimpleExoPlayerView
            android:id="@+id/video_player"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:resize_mode="fill"></com.google.android.exoplayer2.ui.SimpleExoPlayerView>
    

    Write celow code in your Activity:

    private SimpleExoPlayer player;
        private TrackSelector trackSelector;
        // replace URL with your url/path
        private String urlToPlay;
    
        //I have used butterknife you can bind view as per your convinience
        @BindView(R.id.video_player)
        SimpleExoPlayerView feedVideo;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);  
            setUpVideo();
        }
        private void setUpVideo() {
            // 1. Create a default TrackSelector
            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelection.Factory videoTrackSelectionFactory =
                    new AdaptiveTrackSelection.Factory(bandwidthMeter);
            trackSelector = new 
            DefaultTrackSelector(videoTrackSelectionFactory);
    
            // 2. Create the player
            player = ExoPlayerFactory.newSimpleInstance(this, 
                     trackSelector);
    
            feedVideo.setPlayer(player);
            setUpVideoData();
        }
    
     private void setUpVideoData() {
            // Measures bandwidth during playback. Can be null if not required.
            DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            // Produces DataSource instances through which media data is loaded.
            DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
                    Util.getUserAgent(this, "yourApplicationName"), bandwidthMeter);
            // 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(urlToPlay),
                    dataSourceFactory, extractorsFactory, null, null);
            // Prepare the player with the source.
            player.prepare(videoSource);
    
            // Auto Play video as soon as it buffers
            player.setPlayWhenReady(true);
        }
    
       @Override
        public void onPause() {
            super.onPause();
            pauseLivePreview();
        }
    
        @Override
        public void onResume() {
            super.onResume();
            resumeLivePreview();
        }
    
        private void resumeLivePreview() {
            if (player != null) {
                player.setPlayWhenReady(true);
            }
        }
    
        private void pauseLivePreview() {
            if (player != null) {
            if (feedVideo != null && feedVideo.getPlayer() != null) {
                feedVideo.getPlayer().release();
            }
        }
    

    参考https://github.com/google/ExoPlayer https://google.github.io/ExoPlayer/guide.html

相关问题