首页 > 解决方案 > 如何让 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)

标签: androidurlvideoexoplayer

解决方案


从错误来看,问题很可能是设备不支持视频编码。

从 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 示例播放器对其进行测试。


推荐阅读