Torrent 流应用程序中的“参数 str 必须是字符串”错误 [关闭]

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

我正在尝试构建一个 torrent 流媒体 api-thing,它可以流式传输您使用 torrents 下载的视频文件。

这是我的代码:

import torrentStream from 'torrent-stream';
import rangeParser from 'range-parser';
import express from 'express';
const app = express();

const magnetURI = 'magnet:?xt=urn:btih:331B74F12A1CE8D00F0F8BE0844F5CC6471C925E&dn=The.Last.of.Us.S01E04.1080p.HMAX.WEBRip.DDP5.1.Atmos.x264-SMURF%5BTGx%5D&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.cyberia.is%3A6969%2Fannounce&tr=udp%3A%2F%2Fipv4.tracker.harry.lu%3A80%2Fannounce&tr=udp%3A%2F%2Fp4p.arenabg.com%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.birkenwald.de%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.moeking.me%3A6969%2Fannounce&tr=udp%3A%2F%2Fopentor.org%3A2710%2Fannounce&tr=udp%3A%2F%2Ftracker.dler.org%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2970%2Fannounce&tr=https%3A%2F%2Ftracker.foreverpirates.co%3A443%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fcoppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.zer0day.to%3A1337%2Fannounce';

const engine = torrentStream(magnetURI, {  
    path: './downloads',  // location to save the downloaded file
});

engine.on('ready', () => {
    const files = engine.files;

    // Only select the first video file (you may need to modify this depending on your torrent)
    const videoFile = files.find((file) => {
        return file.name.endsWith('.mp4') || file.name.endsWith('.mkv') || file.name.endsWith('.avi');
    });

    if (!videoFile) {
        console.log('No video files found in the torrent.');
        return;
    }

    console.log(`Streaming ${videoFile.name} (${videoFile.length} bytes)`);

    app.get('/', (req, res) => {
        // Set the content type of the response to the video MIME type
        res.contentType(videoFile.name.split('.').pop());
    
        // Get the range of bytes to stream from the request headers
        const range = req.headers.range;
        const parts = rangeParser(videoFile.length, range);
    
        // Set the content range of the response to the range being sent
        res.set('Content-Range', `bytes ${parts[0].start}-${parts[0].end}/${videoFile.length}`);
    
        // Stream the file to the response
        const stream = videoFile.createReadStream(parts[0]);
        stream.pipe(res);
    });

    app.listen(3000, () => {
        console.log('Server listening on port 3000.');
    });
});

engine.on('download', (pieceIndex) => {
    console.log(`Downloaded piece ${pieceIndex}.`);
});

engine.on('idle', () => {
    console.log('Download complete.');
});

但它给了我这个错误:

TypeError: argument str must be a string
      at rangeParser (G:\STREAMING-THING\node_modules\range-parser\index.js:29:11)
      at file:///G:/STREAMING-THING/what.js:33:19
      at Layer.handle [as handle_request] (G:\STREAMING-THING\node_modules\express\lib\router\layer.js:95:5)
      at next (G:\STREAMING-THING\node_modules\express\lib\router\route.js:144:13)
      at Route.dispatch (G:\STREAMING-THING\node_modules\express\lib\router\route.js:114:3)
      at Layer.handle [as handle_request] (G:\STREAMING-THING\node_modules\express\lib\router\layer.js:95:5)
      at G:\STREAMING-THING\node_modules\express\lib\router\index.js:284:15
      at Function.process_params (G:\STREAMING-THING\node_modules\express\lib\router\index.js:346:12)
      at next (G:\STREAMING-THING\node_modules\express\lib\router\index.js:280:10)
      at expressInit (G:\STREAMING-THING\node_modules\express\lib\middleware\init.js:40:5)
javascript node.js streaming
© www.soinside.com 2019 - 2024. All rights reserved.