ytdlp.online

Semua penyelesaian

Pada halaman ini

Baiki ralat Rumble 403 dalam yt-dlp dengan data pemain

Tarikh penerbitan

Muat turun pemalam pembaikan rumble_player.py

Jika yt-dlp memaparkan Unable to download JSON metadata: HTTP Error 403: Forbidden semasa memuat turun video Rumble, muatkan pemalam keserasian dalam artikel ini. Apabila API JSON embedJS/u3 Rumble mengembalikan 403, pemalam akan mendapatkan halaman pemain terbenam rasmi (/embed/) untuk video yang sama, mengekstrak data media sebarisnya dan meneruskan muat turun.

Jika anda mahu mengelakkan persediaan pemalam setempat atau penukaran pautan secara manual, gunakan pemuat turun video Rumble kami yang sudah menyertakan pembaikan ini.

Kenal pasti peringkat yang mengembalikan 403

Ralat 403 boleh berlaku pada tiga peringkat berbeza semasa memuat turun video Rumble. Pemalam ini khusus untuk keadaan kedua:

Ralat atau gejala Lokasi sekatan Tindakan
Unable to download webpage: HTTP Error 403 HTML halaman tontonan disekat, seperti dalam isu #15089 Dapatkan alamat /embed/ melalui API oEmbed rasmi dan gunakan --impersonate firefox
Unable to download JSON metadata: HTTP Error 403 API metadata embedJS/u3 disekat, seperti dalam isu #17496 Gunakan pemalam ini untuk beralih secara automatik kepada data sebaris halaman /embed/
Senarai format dipaparkan, tetapi muat turun segmen atau MP4 mengembalikan 403 CDN menolak permintaan aliran media Semak proksi dan pengepala permintaan, atau pilih format dengan kualiti lain

Langkah pembaikan pantas

1. Simpan fail pemalam

Cipta struktur folder berikut dalam direktori kerja dan simpan kod pemalam lengkap di hujung artikel sebagai rumble_player.py. Anda tidak perlu mengubah kod sumber yt-dlp:

plugins/
└── rumble/
    └── yt_dlp_plugins/
        └── extractor/
            └── rumble_player.py

2. Dapatkan alamat /embed/ rasmi video

ID dalam URL halaman tontonan Rumble, seperti v6xxxx, berbeza daripada ID pemain terbenam, seperti vb0ofn. Oleh itu, alamat terbenam tidak boleh dibina dengan menyalin ID halaman tontonan. Jika anda hanya mempunyai pautan tontonan biasa, gunakan API oEmbed awam Rumble untuk mendapatkan alamat /embed/ sebenar:

curl -fsSG --data-urlencode "url=https://rumble.com/your-video.html" "https://rumble.com/api/Media/oembed.json"

Cari <iframe src="https://rumble.com/embed/xxxx/..." dalam medan html respons JSON dan ambil alamat https://rumble.com/embed/xxxx/.

Jika oEmbed mengembalikan 403, pasang curl_cffi dan cuba lagi menggunakan cap jari Firefox. Gantikan URL contoh di bawah dengan URL penuh halaman video.

python -m pip install curl_cffi
python -c "import sys; from curl_cffi import requests; r = requests.get('https://rumble.com/api/Media/oembed.json', params=dict(url=sys.argv[1]), impersonate='firefox', timeout=15); r.raise_for_status(); print(r.text)" "https://rumble.com/your-video.html"

Jika masih gagal, gunakan pemuat turun dalam talian untuk menukar pautan secara automatik.

3. Senaraikan format dan semak laluan sandaran

Jalankan arahan berikut dari direktori yang mengandungi folder plugins. Gantikan URL contoh dengan alamat /embed/ video sasaran:

yt-dlp --ignore-config --plugin-dirs ./plugins --no-cache-dir -v -F "https://rumble.com/embed/vb0ofn/"

Label [RumbleEmbed+PlayerFallback] dalam log mengesahkan bahawa pemalam telah dimuatkan:

  • Jika API JSON mengembalikan 403, log Downloading player webpage akan menyusul. Ini menunjukkan bahawa laluan sandaran digunakan; senarai format yang terhasil mengesahkan data berjaya dihuraikan.
  • Jika API JSON mengembalikan 200 pada sambungan anda, proses pengekstrakan asal diteruskan tanpa permintaan tambahan ke halaman pemain.

4. Muat turun video dan semak penyahkodan

Pilih ID format daripada output -F, contohnya mp4-360p, kemudian jalankan muat turun:

yt-dlp --ignore-config --plugin-dirs ./plugins --no-cache-dir -v --no-playlist -f mp4-360p -o "rumble-test.%(ext)s" "https://rumble.com/embed/vb0ofn/"

Output terminal ujian kami menunjukkan laluan sandaran digunakan dan muat turun selesai:

[RumbleEmbed+PlayerFallback] vb0ofn: Downloading JSON metadata
[RumbleEmbed+PlayerFallback] vb0ofn: Downloading player webpage
[info] vb0ofn: Downloading 1 format(s): mp4-360p
[download] 100% of    7.85MiB in 00:01:20 at 99.48KiB/s

Gunakan ffprobe dan ffmpeg untuk memeriksa bekas MP4 serta memastikan aliran video dan audio boleh dinyahkod tanpa ralat:

ffprobe -v error -show_entries stream=codec_name,codec_type,width,height:format=duration,size -of json "rumble-test.mp4"
ffmpeg -nostdin -v error -xerror -i "rumble-test.mp4" -map 0:v:0 -map "0:a:0?" -f null -

Cara halaman pemain menyediakan laluan sandaran bagi JSON 403

1. Guna semula data sebaris daripada laman yang sama

Secara lalai, RumbleEmbedIE meminta metadata JSON daripada https://rumble.com/embedJS/u3/?request=video&ver=2&v=.... Pengekstrakan terhenti apabila Cloudflare atau penapisan permintaan laman menyekat API itu dan mengembalikan HTTP 403.

Halaman terbenam rasmi di https://rumble.com/embed/<video_id>/ turut menyertakan objek konfigurasi video dalam skripnya. Strukturnya sama, termasuk medan ua yang mengandungi alamat aliran bagi setiap kualiti, tajuk dan tempoh video. Dengan mengembalikan objek ini daripada _download_json, penghuraian format yt-dlp boleh diteruskan tanpa perubahan pada kod sedia ada.

2. Buang medan yang bukan JSON sah (loaded: h())

Objek sebaris itu bukan literal JSON yang sah sepenuhnya. Di hujungnya terdapat panggilan fungsi masa jalan loaded: h(), seperti berikut:

u.f["vb0ofn"] = {"ua": {"mp4": {"360": {"url": "https://..."}}}, "title": "...", loaded: h()};

Penghurai JSON akan menolak h() sebagai ralat sintaks. Oleh itu, pemalam menggunakan cangkuk transform_source dalam _search_json untuk membuang hanya bahagian akhir , loaded: xxx() dengan ungkapan nalar sebelum penghuraian. Semua pemprosesan dilakukan pada teks dalam memori, tanpa menjalankan JavaScript halaman:

  • Padankan video sasaran: ekstrak hanya objek yang kuncinya sama dengan video_id semasa (\b[\w$]+\.f\[\s*["']{video_id}["']\s*\]\s*=), kemudian pastikan hasilnya ialah kamus dengan medan media ua yang tidak kosong.
  • Hadkan penggunaan laluan sandaran: aktifkannya hanya apabila _download_json menangkap HTTPError berstatus 403. Ralat seperti 401, 404, 429 dan 500, atau halaman tanpa objek yang sah, mengekalkan pengecualian asal.
  • Sokongan dalam perkhidmatan dalam talian: selain memuatkan pemalam, perkhidmatan kami menggunakan API oEmbed untuk menukar URL halaman tontonan kepada alamat /embed/. Jika --impersonate tidak ditentukan, cap jari pelayar firefox-135 digunakan secara lalai.

Kod pemalam lengkap

Simpan kod berikut sebagai plugins/rumble/yt_dlp_plugins/extractor/rumble_player.py. Kod ini telah disahkan dengan Python 3.12+ dan yt-dlp 2026.10.10+.

"""Reuse official player media data when Rumble's JSON endpoint is blocked."""

import re

from yt_dlp.extractor.rumble import RumbleEmbedIE as BaseRumbleEmbedIE
from yt_dlp.networking.exceptions import HTTPError
from yt_dlp.utils import ExtractorError


class RumbleEmbedIE(BaseRumbleEmbedIE, plugin_name='PlayerFallback'):
    def _real_extract(self, url):
        self._player_url = url
        return super()._real_extract(url)

    def _download_json(self, url_or_request, video_id, *args, **kwargs):
        try:
            return super()._download_json(url_or_request, video_id, *args, **kwargs)
        except ExtractorError as error:
            if not isinstance(error.cause, HTTPError) or error.cause.status != 403:
                raise
            webpage = self._download_webpage(self._player_url, video_id, note='Downloading player webpage')
            # Parse this video's object and strip the runtime call without executing page scripts.
            data = self._search_json(
                rf'''\b[\w$]+\.f\[\s*["']{re.escape(video_id)}["']\s*\]\s*=\s*''',
                webpage, 'player data', video_id,
                fatal=False,
                transform_source=lambda source: re.sub(r',\s*loaded\s*:\s*[\w$]+\(\s*\)\s*(?=})', '', source))
            if not isinstance(data, dict) or not data.get('ua'):
                raise error
            return data
Alat yt-dlp
Lihat semua alat yt-dlp
Bantuan & Dokumen yt-dlp