如何以流形式播放声音<list<int>>

问题描述 投票:0回答:1

我正在尝试从 YouTube 获取视频。

class MyCustomSource extends StreamAudioSource { final List<int> bytes; MyCustomSource(this.bytes);

@override Future<StreamAudioResponse> request([int? start, int? end]) async { start ??= 0; end ??= bytes.length; return StreamAudioResponse( sourceLength: bytes.length, contentLength: end - start, offset: start, stream: Stream.value(bytes.sublist(start, end)), contentType: 'video/mp4', ); } }

  var get = await videoUrl.first;
  var getAsUInt8List = Uint8List.fromList(get);
  AudioPlayer player = AudioPlayer();
  await player.setAudioSource(MyCustomSource(getAsUInt8List));
  player.play();

错误:

E / ExoPlayerImplInternal(5995):在com.google.android.exoplayer2.extractor.mp4.Mp4Extractor.read(Mp4Extractor.java:254)E / ExoPlayerImplInternal(5995):在com.google.android.exoplayer2.source.BundledExtractorsAdapter .read(BundledExtractorsAdapter.java:127)E / ExoPlayerImplInternal(5995):在com.google.android.exoplayer2.source.ProgressiveMediaPeriod $ExtractingLoadable.load(ProgressiveMediaPeriod.java:1039)E / ExoPlayerImplInternal(5995):在com.google .android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412) E/ExoPlayerImplInternal(5995): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) E/ExoPlayerImplInternal(5995):在java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:636)E / ExoPlayerImplInternal(5995):在java.lang.Thread.run(Thread.java:764)E / AudioPlayer(5995):TYPE_SOURCE: null I/ExoPlayerImpl(5995):发布 2b7745 [ExoPlayerLib/2.18.7] [generic_x86,为 x86、Google、27 构建的 Android SDK] [goog.exo.core、goog.exo.exoplayer、goog.exo.decoder、goog .exo.datasource,goog.exo.extractor] I/flutter(5995):err:(0)源错误

我使用了其他音频服务,但无法修复它......

flutter testing audio stream playback
1个回答
0
投票

您似乎正在尝试使用流源将视频数据作为音频播放。当您当时读取视频的字节时,它将提供视频数据而不是单独的数据。您需要分离音频然后才能播放。

© www.soinside.com 2019 - 2024. All rights reserved.