在 VLC 媒体播放器中缓存
Caching in VLC Media Player
我正在使用 VLC 媒体播放器 (MobileVLCKit.framwork) 播放 .mpd 格式的文件。对于 AVCaching Player,我们有缓存选项,但在这种情况下我无法添加缓存功能。我试过了,但没有得到任何关于解决这个问题的信息。如果任何机构都可以提供一些想法来解决这个问题,那就太好了。我正在 iOS 开发。
这是 AVcaching 播放器捕获的代码,并希望 VLC 媒体播放器缓存使用相同的代码。
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
Log(@"response received");
if(self.videoCacheObject.response == nil){
self.videoCacheObject.response = (NSHTTPURLResponse *)response;
}
if([self.delegate respondsToSelector:@selector(requestDidReceiveResponse)]){
[self.delegate requestDidReceiveResponse];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.videoCacheObject.videoData appendData:data];
Log(@"video data length = %lu", (unsigned long)self.videoCacheObject.videoData.length);
if(self.videoCacheObject.videoData.length > PARTIAL_LOAD_LENGTH * self.videoCacheObject.response.expectedContentLength && shouldLoadPartial){
[[TMCache sharedCache] setObject:self.videoCacheObject forKey:self.videoName];
[self.connection cancel];
if([self.delegate respondsToSelector:@selector(requestPrefetchingCompleted)]){
Log(@"prefetching completed");
[self.delegate requestPrefetchingCompleted];
}
}
else if(self.videoCacheObject.videoData.length > 0.15*self.videoCacheObject.response.expectedContentLength){
[[TMCache sharedCache] setObject:self.videoCacheObject forKey:self.videoName];
}
if([self.delegate respondsToSelector:@selector(requestDidReceiveData)]){
[self.delegate requestDidReceiveData];
}
}
MobileVLCKit 不允许您以这种方式进行缓存。
你基本上有两个选择:
- 相信 VLC 它在做正确的事情(或提供“--network-caching”作为选项,以毫秒为单位提供所需的缓冲区大小,默认值为 300)
- 自己将媒体缓存为文件并要求 VLC 播放该文件。就像桌面 VLC 一样,文件不需要完整就可以播放大多数格式。
MobileVLCKit 的未来版本将添加第三个选项,即 VLC 的内存输入模块,因此您可以在内存中提供数据而无需先将它们存储到本地,但这在秋季之前无法投入生产今年
我正在使用 VLC 媒体播放器 (MobileVLCKit.framwork) 播放 .mpd 格式的文件。对于 AVCaching Player,我们有缓存选项,但在这种情况下我无法添加缓存功能。我试过了,但没有得到任何关于解决这个问题的信息。如果任何机构都可以提供一些想法来解决这个问题,那就太好了。我正在 iOS 开发。
这是 AVcaching 播放器捕获的代码,并希望 VLC 媒体播放器缓存使用相同的代码。
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
Log(@"response received");
if(self.videoCacheObject.response == nil){
self.videoCacheObject.response = (NSHTTPURLResponse *)response;
}
if([self.delegate respondsToSelector:@selector(requestDidReceiveResponse)]){
[self.delegate requestDidReceiveResponse];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.videoCacheObject.videoData appendData:data];
Log(@"video data length = %lu", (unsigned long)self.videoCacheObject.videoData.length);
if(self.videoCacheObject.videoData.length > PARTIAL_LOAD_LENGTH * self.videoCacheObject.response.expectedContentLength && shouldLoadPartial){
[[TMCache sharedCache] setObject:self.videoCacheObject forKey:self.videoName];
[self.connection cancel];
if([self.delegate respondsToSelector:@selector(requestPrefetchingCompleted)]){
Log(@"prefetching completed");
[self.delegate requestPrefetchingCompleted];
}
}
else if(self.videoCacheObject.videoData.length > 0.15*self.videoCacheObject.response.expectedContentLength){
[[TMCache sharedCache] setObject:self.videoCacheObject forKey:self.videoName];
}
if([self.delegate respondsToSelector:@selector(requestDidReceiveData)]){
[self.delegate requestDidReceiveData];
}
}
MobileVLCKit 不允许您以这种方式进行缓存。
你基本上有两个选择:
- 相信 VLC 它在做正确的事情(或提供“--network-caching”作为选项,以毫秒为单位提供所需的缓冲区大小,默认值为 300)
- 自己将媒体缓存为文件并要求 VLC 播放该文件。就像桌面 VLC 一样,文件不需要完整就可以播放大多数格式。
MobileVLCKit 的未来版本将添加第三个选项,即 VLC 的内存输入模块,因此您可以在内存中提供数据而无需先将它们存储到本地,但这在秋季之前无法投入生产今年