我正在尝试为我们的一个应用程序实现exoplayer 2。
似乎留档和例子比自动播放更复杂的东西是非常差的。
我的问题是,我创建了一个媒体源,并将其设置为播放器,之后我有一个自定义的图标来播放视频,并在结束时寻求回到0。
此外,我还有一个自定义的双搜索杆,当移动它时,它将寻找一个位置,并在选定的开始和结束时间之间剪辑视频。
我不确定在不重新创建整个东西的情况下改变玩家的来源是否可能。
我将我的播放器初始化为:
@AfterViews
protected void init() {
TrackSelector trackSelector = new DefaultTrackSelector();
mPlayer = ExoPlayerFactory.newSimpleInstance(getContext(), trackSelector);
mVideoView.setPlayer(mPlayer);
mPlayer.addListener(this);
}
之后,我这样准备玩家:
public void setVideoPath(final String videoPath) {
mVideoPath = videoPath;
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getContext(), Util.getUserAgent(getContext(), "yourApplicationName"));
// This is the MediaSource representing the media to be played.
videoSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(videoPath));
mPlayer.prepare(videoSource);
}
单击“我的播放”图标时,它会运行:
@Click(R.id.view_video_preview_container_play)
void onPlayClicked() {
mPlayButton.setVisibility(GONE);
mPlayer.setPlayWhenReady(true);
}
当播放完成时,我做:
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == STATE_ENDED) {
mPlayButton.setVisibility(VISIBLE);
mPlayer.seekTo(0);
mPlayer.setPlayWhenReady(false);
}
}
不,当我寻求时,我会:
disposable = source
.debounce(500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(range -> {
mPlayer.stop();
mPlayButton.setVisibility(VISIBLE);
clippingSource = new ClippingMediaSource(videoSource, 2000000, 5000000);
mPlayer.prepare(clippingSource);
}
);
现在当光源发射到我的可见光时,我得到了:
2018-11-16 12:48:16.463 28090-28209/nl.dtt.vormats E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.source.ClippingMediaSource$IllegalClippingException: Illegal clipping: not seekable to start
at com.google.android.exoplayer2.source.ClippingMediaSource$ClippingTimeline.<init>(ClippingMediaSource.java:350)
at com.google.android.exoplayer2.source.ClippingMediaSource.refreshClippedTimeline(ClippingMediaSource.java:296)
at com.google.android.exoplayer2.source.ClippingMediaSource.onChildSourceInfoRefreshed(ClippingMediaSource.java:262)
at com.google.android.exoplayer2.source.ClippingMediaSource.onChildSourceInfoRefreshed(ClippingMediaSource.java:34)
at com.google.android.exoplayer2.source.CompositeMediaSource$1.onSourceInfoRefreshed(CompositeMediaSource.java:103)
at com.google.android.exoplayer2.source.BaseMediaSource.refreshSourceInfo(BaseMediaSource.java:73)
at com.google.android.exoplayer2.source.ExtractorMediaSource.notifySourceInfoRefreshed(ExtractorMediaSource.java:400)
at com.google.android.exoplayer2.source.ExtractorMediaSource.prepareSourceInternal(ExtractorMediaSource.java:348)
at com.google.android.exoplayer2.source.BaseMediaSource.prepareSource(BaseMediaSource.java:137)
at com.google.android.exoplayer2.source.CompositeMediaSource.prepareChildSource(CompositeMediaSource.java:109)
at com.google.android.exoplayer2.source.ClippingMediaSource.prepareSourceInternal(ClippingMediaSource.java:216)
at com.google.android.exoplayer2.source.BaseMediaSource.prepareSource(BaseMediaSource.java:137)
at com.google.android.exoplayer2.ExoPlayerImplInternal.prepareInternal(ExoPlayerImplInternal.java:396)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:286)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:166)
at android.os.HandlerThread.run(HandlerThread.java:65)
不幸的是,正如我在留档前所说的,如果很差,我只能发现异常被抛出:
if (startUs != 0 && !window.isSeekable) {
throw new IllegalClippingException(IllegalClippingException.REASON_NOT_SEEKABLE_TO_START);
}
具体来说window.isSeekable是false。
解决方案是重新创建MediaSource,因为同一个MediaSource似乎无法重用。
本接口可以实现admin后台的视频的剪辑合并功能 地址为: https://spark.bokecc.com/api/video/montage 需要传递以下参数: 参数 说明 editParam 编辑视频参数,必选(该参数为json格式并且遵循THQS加密规则) editParam包含以下参数: 参数 说明 userId 用户ID,必选 dstName 新视频名称,(不填,系统分配一个默认名称)
接口地址 https://spark.bokecc.com/api/video/montage 请求类型 GET 请求参数 editParam 编辑视频参数,必选(该参数为json格式并且遵循THQS加密规则,详情参见SparkAPI相关说明) 参数 editParam 包含如下参数: 参数 说明 userId 用户ID,必选 dstName 新视频名称,(不填,系统分配一个默认名称) categ
问题内容: 我目前有一个带注释的存储库。我要添加以下内容: 这可以正常工作,但默认情况下的路径为。 如何删除零件而只有路径? 问题答案: 不幸的是,这是不可能的。我对Spring Data Rest源代码进行了一些研究。 在中有用于URI构建的常量: 而 这里 是处理按服务要求与操作方法的注释。因此,如您所见,该部分是硬编码的,无法更改。
我在azure中有一个设置,在一个资源组中组合了一组资源。我希望我的服务位于西欧,因此我的所有资源都在那里(如果可能) 我刚刚注意到,当创建资源组时,我不小心使用了美国西部。 因此,当前的设置是: 资源组1(美国西部) 应用服务1(西欧) 应用服务2(西欧) SQL服务器(西欧) 存储帐户(西欧) (西欧) 我是否可以更改资源组的位置而不必创建新组并每次迁移? 也许更重要的是:我应该改变位置还是不
我要做的是创建一种播放列表,只使用html5和vanilla javascript(不使用jquery)。相同的短视频一直循环直到你点击其中一个箭头,然后一行中的下一个(或上一个)视频被加载到相同的视频元素中。 以下是我的资料: HTML JavaScript 但是,使用这段代码,单击任何一个箭头似乎都没有任何作用。但我不确定我做错了什么。我首先想到的是if测试失败了,所以它只是重新加载了相同的视
简介 Laravel Mix 提供了简介且可读性高的 API,用于使用几个常见的 CSS 和 JavaScript 预处理器为应用定义 Webpack 构建步骤。可以通过简单链式调用来定义资源的编译。例如: mix.js('resources/assets/js/app.js', 'public/js') .sass('resources/assets/sass/app.scss', 'pu