如何在初始化AVURLAsset时针对AVURLAssetHTTPCookiesKey设置正确的cookie值

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

我必须播放HLS流,并且它是受保护的/受保护的。为了下载清单文件和其他ts文件,预计请求将发送有效的Cookies信息。我确实从服务器接收到Cookies信息,但它不是响应标头的一部分,而是作为响应字符串的一部分出现的。这意味着Cookies不会自动成为NSHTTPStorage的一部分,应用程序必须使用响应字符串并从那里获取Cookies信息。初始化AVURLAsset时还需要设置。根据AVURLAsst文档,为了发送Cookie信息,我们应该使用选项“ AVURLAssetHTTPCookiesKey”。我在下面的代码中提到了如何使用此键初始化AVURLAsset

    let cookieOptions = [AVURLAssetHTTPCookiesKey: Any]
    let assets = AVURLAsset(url: url as URL, options: cookieArrayOptions)

我的主要问题是如何针对AVURLAssetHTTPCookiesKey设置值。它采用'Any'类型的值。由于Apple刚刚提到它期望Any值,并且没有告诉它内部如何以正确的格式解释和转换该值。

我尝试了两种设置值的方法:说我必须设置两个Cookies键,即MyCookies1,MyCookies2

使用NSHTTPStorage的方法1

let propertiesKey1 = [HTTPCookiePropertyKey.domain : "Domain=abc.com",HTTPCookiePropertyKey.path:"/",HTTPCookiePropertyKey.secure:true,HTTPCookiePropertyKey.init("HttpOnly"):true,HTTPCookiePropertyKey.value:"abc1",HTTPCookiePropertyKey.name:"MyCookies1"] as [HTTPCookiePropertyKey : Any]
let propertiesKey2 = [HTTPCookiePropertyKey.domain : "Domain=abc.com",HTTPCookiePropertyKey.path:"/",HTTPCookiePropertyKey.secure:true,HTTPCookiePropertyKey.init("HttpOnly"):true,HTTPCookiePropertyKey.value:"abc2",HTTPCookiePropertyKey.name:"MyCookies2"] as [HTTPCookiePropertyKey : Any]
let cookieKey1 =   HTTPCookie(properties: propertiesKey1)
let cookieKey2 =   HTTPCookie(properties: propertiesKey2)
HTTPCookieStorage.shared.setCookie(cookieKey1!)
HTTPCookieStorage.shared.setCookie(cookieKey2!)
let cookiesArray = HTTPCookieStorage.shared.cookies!
let cookieArrayOptions = [AVURLAssetHTTPCookiesKey: cookiesArray]
guard let url = URL(string:"abc.com") else { return }
let assets = AVURLAsset(url: url as URL, options: cookieArrayOptions)

但是这不起作用,AVPlayer只是初始化并停止工作

方法2

 let values = ["Cookie": "MyCookies1=abc1; MyCookies2=abc2"]
 let cookieArrayOptions = [AVURLAssetHTTPCookiesKey: values]
 guard let url = URL(string:"abc.com") else { return }
 let assets = AVURLAsset(url: url as URL, options: cookieArrayOptions)

但是此选项总是崩溃。可能是我没有以正确的格式设置值。

我已尝试提供尽可能多的信息,但是如果您需要更多信息,请告诉我。

ios avplayer avurlasset
1个回答
0
投票

经过几次尝试,我可以使其与方法1 usign NSHTTPStorage一起使用。我犯了一个不使用HTTPS流URL的错误。我已经通过传递ATS允许播放非HTTP URL,并允许任意加载。但是AVURLAssetHTTPCookiesKey期望仅提供为cookie设置的HTTPS URL。我使用HTTPS流,并最终在播放HLS流中下载清单/段文件时,在请求标头中开始内部发送Cookie,]

© www.soinside.com 2019 - 2024. All rights reserved.