Exoplayer - 主 URL 之间的 ConcatenatingMediaSource

Exoplayer - ConcatenatingMediaSource between main URL

我正在尝试连接三个视频 url 并使用 Exoplayer ConcatenatingMediaSource 播放。

我试过的:

MediaSource mainSource = new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...);
MediaSource thirdSource = new ExtractorMediaSource(thirdVideoUri, ...);
// Plays the first video, then second & third video.
ConcatenatingMediaSource concatenatedSource =
    new ConcatenatingMediaSource(mainSource, secondSource, thirdSource);

这个适用于序列视频播放。

我的问题

我的主要来源是电影(~2 小时)

我的第二个来源和第三个来源是视频广告(2 分钟)

我需要在电影播放 30 分钟后播放第一个视频广告。 并且需要在电影播放 60 分钟后播放第二个视频广告。

我需要按以下顺序播放 3 个视频

正片(前 30 分钟)--> 2 分钟的第一个广告 --> 正片(31-60 分钟)--> 2 分钟的第二个广告 --> 正片(61-结束)

我的问题

如何在主url之间concatenate/play两个视频url?

谁能帮帮我。这个问题让我头疼了 16 多个小时。

终于从官方 github issues

得到了解决方案

https://github.com/google/ExoPlayer/issues/3299

解决方案是 - ClippingMediaSource

示例实现

   MediaSource movieMediaSource = MyExoPlayer.getMediaSourceFromUrl(StreamPlayerActivity.this, mLiveURL);
    long oneMinute =  1000 * 1000 * 60 ;
    ClippingMediaSource videoSource1 = new ClippingMediaSource(movieMediaSource, 0,  oneMinute,false);
    ClippingMediaSource videoSource2 = new ClippingMediaSource(movieMediaSource,  oneMinute, 2 * oneMinute,false);
    ClippingMediaSource videoSource3 = new ClippingMediaSource(movieMediaSource, 2 * oneMinute, 10 * oneMinute,false);

    MediaSource adVideoSource1 = MyExoPlayer.getMediaSourceFromUrl(StreamPlayerActivity.this, mPromoVideoURL1);
    MediaSource adVideoSource2 = MyExoPlayer.getMediaSourceFromUrl(StreamPlayerActivity.this, mPromoVideoURL2);
    ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource(videoSource1, adVideoSource1, videoSource2, adVideoSource2, videoSource3);