expo-av 如何加载音频流?

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

我正在尝试实现 expo-av 来加载音频流。它可以工作,但它会在大约 25 秒内加载音频,我发现这太慢了...我没有看到用户等待 25 秒来加载音频,他只会认为它不起作用并退出我的应用程序。

这是我的代码:


import { Audio } from "expo-av";

const streamUr = "https://adminradiosulamita.store:8000/radio.mp3";

import { Sound } from "expo-av/build/Audio";

export default function HomeScreen() {
  const [sound, setSound] = useState<Sound>();
  const [loading, setLoading] = useState(false);

  async function playSound() {
    setLoading(true);

    // const { sound } = await Audio.Sound.createAsync(
    //   {
    //     uri: streamUrl,
    //     headers: {
    //       Range: "bytes=0-",
    //       // pass aditional headers so it knows its an audio stream
    //       "Content-Type": "audio/mpeg",
    //       "Icy-MetaData": "1",
    //     },
    //   },
    //   {
    //     shouldPlay: true,
    //   }
    // );

    const sound = new Audio.Sound();

    await sound.loadAsync(
      {
        uri: streamUrl,
      },
      {
        shouldPlay: true,
      }
    );

    setSound(sound);

    await sound.playAsync();
    setLoading(false);
  }

  useEffect(() => {
    return sound
      ? () => {
          sound.unloadAsync();
        }
      : undefined;
  }, [sound]);

  return (
    <ParallaxScrollView>
      <ThemedView style={styles.titleContainer}>
        <TouchableOpacity onPress={playSound}>
          <ThemedText type="title">Play</ThemedText>
        </TouchableOpacity>
        <ThemedText type="title">
          {loading ? "Cargando" : "No cargando"}
        </ThemedText>
      </ThemedView>
    </ParallaxScrollView>
  );
}



如您所见,我尝试了不同的方法,但加载速度仍然很慢。怎么解决?

reactjs react-native expo audio-streaming shoutcast
1个回答
0
投票

我对 expo-av 一无所知,但您可能遇到了播放器必须“嗅探”内容类型的问题,这是一个常见问题。

此流是 MP3 流。 Icecast 和 SHOUTcast 都不会为您对齐流,因此流可以从任意字节偏移量开始。 由客户端来确定 MPEG 帧边界。 首先查找一系列字节,其中 前 11 位全部设置为

1
。 编解码器会为您完成此操作,但如果播放器不知道要使用什么编解码器,它可能会在回退到 MP3 之前缓冲一些任意数据块,例如 256 KB。

您通常可以做的另一件事是告知播放器您正在使用的编解码器。 您必须查看您的框架是否允许设置

audio/mpeg
的类型。

最后,如果您可以调整任何缓冲区大小,请这样做。 128 kbit/s 音频不需要太多数据。 如果它确实是没有服务器端缓冲区的实时流,那么可能需要很多秒来缓冲播放器认为需要保持稳定的播放速率。 请记住,这些播放器默认针对视频进行调整,并且通常会缓冲固定的最小量。

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