Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从iOS中的HLS下载特定分辨率_Ios_Objective C_Video Streaming_Http Live Streaming_Avasset - Fatal编程技术网

从iOS中的HLS下载特定分辨率

从iOS中的HLS下载特定分辨率,ios,objective-c,video-streaming,http-live-streaming,avasset,Ios,Objective C,Video Streaming,Http Live Streaming,Avasset,下面是我用来从HLS下载视频的代码。它工作良好,总是下载高分辨率。如何切换到我想要的特定分辨率 NSURLSessionConfiguration *urlSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"assetDowloadConfigIdentifier"]; AVAssetDownloadURLSession *avAssetDownloadS

下面是我用来从HLS下载视频的代码。它工作良好,总是下载高分辨率。如何切换到我想要的特定分辨率

NSURLSessionConfiguration *urlSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"assetDowloadConfigIdentifier"];
AVAssetDownloadURLSession *avAssetDownloadSession = [AVAssetDownloadURLSession sessionWithConfiguration:urlSessionConfiguration assetDownloadDelegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURL *assetURL = [NSURL URLWithString:@"https://a4i6y2k6.stackpathcdn.com/vistvorigin/smil:4b0d690b7b3bc8ac5da2049f50c80794c762423e.smil/playlist.m3u8"];
AVURLAsset *hlsAsset = [AVURLAsset assetWithURL:assetURL];

if (@available(iOS 10.0, *)) {
    AVAssetDownloadTask *avAssetDownloadTask = [avAssetDownloadSession assetDownloadTaskWithURLAsset:hlsAsset assetTitle:@"downloadedMedia" assetArtworkData:nil options:videoSettings];
    AVKeyValueStatus status = [hlsAsset statusOfValueForKey:@"tracks" error:nil];if (AVKeyValueStatusLoaded != status) {     NSArray *keys = [NSArray arrayWithObject:@"tracks"];     [hlsAsset loadValuesAsynchronouslyForKeys:keys                          completionHandler:^{
    }];}
[avAssetDownloadTask resume];

这个答案是迅速的。下载特定分辨率的关键是将AVAssetDownloadTaskMinimumRequiredMediaBitrateKey设置为略低于所需比特率的比特率,因为它考虑了最小比特率

if #available(iOS 10.0, *) {
        if let downloadTask = hlsDownloadSession.makeAssetDownloadTask(asset: asset,
                                                                    assetTitle: "samplevid",
                                                                    assetArtworkData: nil,
                                                                    options: [AVAssetDownloadTaskMinimumRequiredMediaBitrateKey: 200000]){


            downloadTask.resume() 
 }
}

这将下载比特率高于200000的媒体,在下载之前,您需要像解析.m3u8 URL一样进行操作,在这里,根据您开始下载所需的分辨率,您不需要解析实际下载的m3u8,默认情况下,将选择最高的媒体比特率进行下载。如果您传递options参数,它将使用该值作为bps中的NSNumber。通常我们知道我们的选项,但无论如何我们需要API中的这些媒体选项,但不幸的是,如果您使用HLS,API不会共享这些选项。如此悲伤:(不会下载更高版本吗?@babar默认情况下,将选择最高媒体比特率进行下载。如果您通过上述选项参数,则将选择大于或等于此值的最低媒体比特率。该值应为以bps为单位的NSNumber。如果找不到合适的媒体比特率,则将选择最高媒体比特率。)挑选出来的。