import type { PlayUrlResponse } from '../services/types'; /** * 从 Bilibili DASH 响应生成 MPD data URI。 * 选取 id === qn 的视频流(找不到则取第一条),带宽最高的音频流。 * 返回 "data:application/dash+xml;base64,..." 供 react-native-video (ExoPlayer) 使用。 */ export function buildDashDataUri(playData: PlayUrlResponse, qn: number): string { const dash = playData.dash!; const video = dash.video.find(v => v.id === qn) ?? dash.video[0]; const audio = dash.audio.reduce((best, a) => a.bandwidth > best.bandwidth ? a : best ); const dur = dash.duration; const xml = ` ${escapeXml(video.baseUrl)} ${escapeXml(audio.baseUrl)} `; return `data:application/dash+xml;base64,${btoa(xml)}`; } function escapeXml(s: string): string { return s .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); }