android - 如何让 exoplayer 播放云端硬盘中的视频
问题描述
目前,我正在尝试播放网络上的视频。我尝试了很多方法来播放网络上的视频,但都没有奏效。我第一次用videoView,老是说视频文件不能播放。该链接不一定来自云端硬盘或使用我现在使用的方法。我只需要让它工作。
这是代码现在的样子:
String url = "https://drive.google.com/file/d/1CRJ8tL-DyjD0Nwd7ezkboGm6570zMf4C/view?usp=sharing";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starter_yoga);
findViewById(R.id.backY).setOnClickListener(v -> {
onBackPressed();
});
SimpleExoPlayer simpleExoPlayer = new SimpleExoPlayer.Builder(this).build();
PlayerView playerView = findViewById(R.id.SY);
playerView.setPlayer(simpleExoPlayer);
MediaItem mediaItem = MediaItem.fromUri(url);
simpleExoPlayer.addMediaItem(mediaItem);
simpleExoPlayer.prepare();
simpleExoPlayer.play();
}
显现:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
android:usesCleartextTraffic="true" 错误:
2021-08-30 15:37:32.662 4582-6879/? E/TaskPersister: File error accessing recents directory
(directory doesn't exist?).
2021-08-30 15:37:35.676 4130-4254/? E/Netd: getNetworkForDns: getNetId from enterpriseCtrl
is
netid 0
2021-08-30 15:37:35.708 4130-4260/? E/Netd: getNetworkForDns: getNetId from enterpriseCtrl is netid 0
2021-08-30 15:37:35.778 4164-4184/? E/HYPER-HAL: [Request.cpp]acquire(): Request:: id :
10586920, No Resource to set
2021-08-30 15:37:36.179 4219-4242/? E/BufferQueueProducer:
[com.example.diligent/com.diligent_app.diligent.yoga.Yoga$_20925#0](id:107b0000491d,api:0,p:-1,c:4219) disconnect: not connected
2021-08-30 15:37:36.526 3933-3933/? E/vold: getUsedF2fsFileNode -> Cannot Get Used FileNode Number (errno=25 Inappropriate ioctl for device)
2021-08-30 15:37:36.718 20925-23908/com.example.diligent E/ExoPlayerImplInternal: Playback error
com.google.android.exoplayer2.ExoPlaybackException: Source error
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:624)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:594)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:246)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (FlvExtractor, FlacExtractor, WavExtractor, FragmentedMp4Extractor, Mp4Extractor, AmrExtractor, PsExtractor, OggExtractor, TsExtractor, MatroskaExtractor, AdtsExtractor, Ac3Extractor, Ac4Extractor, Mp3Extractor, JpegExtractor) could read the stream.
at com.google.android.exoplayer2.source.BundledExtractorsAdapter.init(BundledExtractorsAdapter.java:92)
at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1025)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:409)
解决方案
从错误来看,问题很可能是设备不支持视频编码。
从 ffprobe ( https://ffmpeg.org/ffprobe.html ):
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/y_v_starter_yoga.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:06:00.02, start: 0.000000, bitrate: 860 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1080x2260 [SAR 1:1 DAR 54:113], 839 kb/s, 20 fps, 20 tbr, 10240 tbn, 40 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 14 kb/s (default)
Metadata:
handler_name : SoundHandler
您可以看到它正在使用许多 Android 设备不支持的“高”配置文件 - 请参阅此处了解标准媒体支持:
https://developer.android.com/guide/topics/media/media-formats
如果您可以使用基线配置文件对其进行重新编码,则可以验证这是问题所在。
如果您想查看 ExoPlayer 播放网络视频的工作示例,ExoPlayer 自己的示例播放器包括这些。您还可以编辑示例 JSON 媒体列表以添加您自己的视频链接,并直接使用 ExoPlayer 示例播放器对其进行测试。
推荐阅读
- docker - 如何在 docker compose 文件上设置 MySQL 和 phpmyadmin
- javascript - JS 不会将导入和声明的变量读入 console.log
- javascript - 尝试读取从反应 js 中的 API 返回的响应时获取未定义
- google-compute-engine - 谷歌云控制台 - 找不到 phpmyadmin 404
- selection - bootstrap-vue 选择带有过滤器选项的组件?
- android - 为什么 API Level 29 WiFi 连接需要密码?
- php - PHP Traits 通用和单个(单独)属性范围
- c# - 如何将滚动条与 RichTextBox 中的行匹配
- swift - 在 TableViewCell 中使用协议发现 Nil
- firebase - 如何保护电子邮件地址不被阅读,但在前端使用 Firestore 使其可搜索?