android - 如何使用 ExoPlayer 从服务器流式传输 mp4 视频?

标签 android video-streaming exoplayer

最近我遇到了 google exoplayer,它有一些很酷的功能,但缺乏文档和支持,而且我对它很陌生,我的疑问是如何使用服务器 URL 播放 mp4 视频。现在让我解释一下到目前为止我所尝试的内容

  1. 我已经在我的项目中成功实现了 exoplayer 并使其正常工作
  2. 但我的问题是首先使用我的服务器 URL,它会完成完整的视频缓冲区,然后才开始播放,所以需要时间?我需要的是在收到每个响应后需要同时播放,以便视频可以快速播放,我怎样才能实现这一点。现在让我发布到目前为止我尝试过的内容:

        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    
        TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
        LoadControl loadControl = new DefaultLoadControl();
        player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
        simpleExoPlayerView = new SimpleExoPlayerView(this);
        simpleExoPlayerView = findViewById(R.id.player_view);
        simpleExoPlayerView.setUseController(true);
        simpleExoPlayerView.setVisibility(View.VISIBLE);
        simpleExoPlayerView.requestFocus();
        simpleExoPlayerView.setPlayer(player);
    
        Log.d("url", intent.getStringExtra("videopath") + "?api_key=" + getResources().getString(R.string.dream_factory_api_key) + "&session_token=" + PreferenceUtils.getInstance(this).getStrData(PreferenceUtils.SESSION_TOKEN));
        MediaSource mediaSource = new ExtractorMediaSource(Uri.parse(intent.getStringExtra("videopath") + "?api_key=" + getResources().getString(R.string.fs) + "&session_token=" + PreferenceUtils.getInstance(this).getStrData(PreferenceUtils.SESSION_TOKEN)),
                new CacheDataSourceFactory(this, 100 * 1024 * 1024, 5 * 1024 * 1024), new DefaultExtractorsFactory(), null, null);
        player.prepare(mediaSource);
    

有什么帮助吗?我这样做的方式正确吗?我需要的是它需要像 youtube 播放一样的缓冲区,而不是完全像缓冲区一样的缓冲区然后播放,提前致谢

最佳答案

您可能应该使用 DashMediaSource,而不是 ExtractorMediaSource。这正是您想要的(播放时缓冲)。

关于android - 如何使用 ExoPlayer 从服务器流式传输 mp4 视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47546088/

相关文章:

android - ExoPlayer,泛化 SimpleCache 行为

android - Music Player App - 避免两个音乐播放器同时播放

android - 如何释放Exoplayer PlayerView的播放器?

android - 导入gradle项目到eclipse

安卓应用测试

ffmpeg - 如何在FFMpeg中连接两个或多个具有相同宽度和不同高度的视频并保持相同的纵横比?

c++ - WMV 媒体流在 Windows 7 上比在 XP 上看起来更像素化

android - cocos2d-X facebook 集成 c++

java - 找到最亮的轮廓opencv java

video-streaming - Java 高清视频捕获处理和流式传输