fix(iOS): add User-Agent header to all HLS segment + playlist requests
CBS streams require iPhone UA to serve actual TS data. Without it, segments download as empty/small placeholder responses. Also added per-segment size logging for diagnostics.
This commit is contained in:
parent
1f8ecb9bcb
commit
d0cecebe69
@ -104,8 +104,12 @@ final class HLSRecorder: ObservableObject {
|
||||
// MARK: - HLS 持续录制(轮询 m3u8 + 增量下载片段)
|
||||
|
||||
private func recordHLS(url: URL) async throws -> URL {
|
||||
let ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15"
|
||||
|
||||
// 1. 解析 master playlist
|
||||
let (data, _) = try await URLSession.shared.data(from: url)
|
||||
var req = URLRequest(url: url)
|
||||
req.setValue(ua, forHTTPHeaderField: "User-Agent")
|
||||
let (data, _) = try await URLSession.shared.data(for: req)
|
||||
guard let playlist = String(data: data, encoding: .utf8) else {
|
||||
throw RecorderError.invalidPlaylist
|
||||
}
|
||||
@ -143,7 +147,9 @@ final class HLSRecorder: ObservableObject {
|
||||
|
||||
while !stopRequested {
|
||||
// 拉取最新的 m3u8
|
||||
guard let (plData, _) = try? await URLSession.shared.data(from: mediaPlaylistURL),
|
||||
var plReq = URLRequest(url: mediaPlaylistURL)
|
||||
plReq.setValue(ua, forHTTPHeaderField: "User-Agent")
|
||||
guard let (plData, _) = try? await URLSession.shared.data(for: plReq),
|
||||
let plText = String(data: plData, encoding: .utf8) else {
|
||||
consecutiveErrors += 1
|
||||
if consecutiveErrors >= maxConsecutiveErrors {
|
||||
@ -178,13 +184,17 @@ final class HLSRecorder: ObservableObject {
|
||||
for segURL in newSegments {
|
||||
guard !stopRequested else { break }
|
||||
do {
|
||||
let (segData, _) = try await URLSession.shared.data(from: segURL)
|
||||
var req = URLRequest(url: segURL)
|
||||
req.setValue("Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15", forHTTPHeaderField: "User-Agent")
|
||||
let (segData, resp) = try await URLSession.shared.data(for: req)
|
||||
let httpResp = resp as? HTTPURLResponse
|
||||
NSLog("[MiniPlayer] Segment %d: %d bytes, HTTP %d", segmentIndex, segData.count, httpResp?.statusCode ?? 0)
|
||||
let localFile = tempDir.appendingPathComponent("seg_\(String(format: "%06d", segmentIndex)).ts")
|
||||
try segData.write(to: localFile)
|
||||
downloadedSegments.append(localFile)
|
||||
segmentIndex += 1
|
||||
} catch {
|
||||
// 单个片段下载失败不中断
|
||||
NSLog("[MiniPlayer] Segment download failed: %@", error.localizedDescription)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user