对于第一个版本的 Exoplayer 和原始的 Android 媒体播放器,似乎有几个相同答案的克隆,但它们不能在 Exoplayer2 上编译,后者重新组织了相当多的内部代码。
合理勤奋的搜索没有找到任何以库或示例代码的方式执行此操作的内容(例如捏缩放和滚动等)。有很多代码可以为静止图像执行此操作(例如通过毕加索检索等)
有没有人有可以构建和使用 ExoPlayer2 的示例?
提前致谢!
更新:问题似乎是我不能子类化或将 VideoListener 附加到 SimpleExoPlayer 实例;尝试这样做会让您一无所获,因为该实例已经附加了自己的侦听器,当涉及 TextureView 时,该侦听器对纵横比的关注度为零。这使得视频完全无法使用;听众可以很容易地纠正这一点,但似乎无法附加它(这样做的方法被标记为已弃用,如果您无论如何都尝试使用它们,您将无法获得视频输出。)
此代码将绘制并运行 ua.pohohalo.zoomabletextureview(或只是一个普通的 TextureView),但我无法将视频侦听器附加到它,默认情况下,当它初始化时,使视频垂直适应视图大小在破坏纵横比的纵向模式下。如果您将视频的大小调整为低于显示窗口大小,它也会出现严重的故障,但我可以在 polohalo 的代码中测试并修复它。我还没有想出如何做的是让原始显示遵守原始纵横比,或者附加一个 VideoListener 以在 init 上设置它——如果我使用 PlayerView,它可以正常工作,但无法扩展支持翻译。此代码块中的“VideoListener”原型应该解决纵横比问题——这就是我一直无法附加或找到一种方法来在原始视图上设置标志(这也可以完成这项工作),告诉 ExoPlayer 兑现原始纵横比并适合屏幕尺寸。
对适用于 PlayerView 的 simpleExoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT) 的调用在 TextureView 上无效——似乎该模式默认为 RESIZE_MODE_FILL,我找不到将其设置为 FIT 的方法。
package net.cudasystems.android.videotest;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.TextureView;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoListener; …Run Code Online (Sandbox Code Playgroud)