0

オーディオを再生するための react-native-track-player ライブラリの助けを借りて、React ネイティブと Nodjs を使用して、真のオーディオ ストリーミング アプリとサーバーを作成しようとしています。すべてが正常に機能していますが、サーバーからの真のライブ ストリームになると、react-native-track-player はコンテンツ範囲を送信しないため、サーバーはコンテンツ範囲で部分コンテンツ 206 ステータスを応答します。

誰もこれについて何かを得ましたか?

ここに私がサーバー用に持っているもの:

const getLocalFileSubLocation = async (req, res) => {

const { location, sub_location, filename } = req.params

const fileLocation = path.join(UPLOAD_DIR, location, sub_location, filename)

if (!fs.existsSync(fileLocation)) return Resp.notFound(res)

const fileSize = fs.statSync(fileLocation).size

const contentType = mimeTypes.lookup(fileLocation)

if (contentType !== 'audio/mpeg') return fs.createReadStream(fileLocation).pipe(res)

const range = req.headers.range ? req.headers.range : "bytes=0-"
const CHUNK_SIZE = 10 ** 6 / 2; // 1mb

let [start, end] = range.replace(/bytes=/, "").split("-")

start = parseInt(start, 10)
end = start + CHUNK_SIZE

res.writeHead(206, {
    "Content-Range": `bytes ${start}-${end}/${fileSize}`,
    "Accept-Ranges": "bytes",
    "Content-Length": end - start + 1,
    "Content-Type": contentType,
});

fs.createReadStream(fileLocation, { start, end }).pipe(res)

}

router.get("/:location/:sub_location/:filename", getLocalFileSubLocation)

一方、オーディオプレーヤー:

 await TrackPlayer.setupPlayer({
    maxCacheSize: 1048576,
    waitForBuffer: true,
});

export const onAddTrack = async (song: any) => {
const track: Track = {
    id: song._id,
    title: song.title,
    url: FILE_URL + song.url,
    artist: song.singer?.name,
    description: song.description,
    artwork: FILE_URL + song.cover,
};
await TrackPlayer.add(track);

};

ヘッダーは次のようになります。

    { 'icy-metadata': '1',
  'user-agent':
   'react-native-track-player/1.0 (Linux;Android 11) ExoPlayerLib/2.11.4',
  'accept-encoding': 'identity',
  host: '143.244.142.104:8000',
  connection: 'Keep-Alive' }

ストリーミング uri の例を次に示します。http://143.244.142.104:8000/file/songs/audios/default.mp3

4

0 に答える 0