2015-05-14 116 views
0

我正在使用VLC媒体播放器(MobileVLCKit.framwork)播放.mpd格式文件。在AVCaching播放器的情况下,我们可以选择缓存,但在这种情况下,我无法添加缓存功能。我试过但没有得到任何有关解决这个问题的信息。如果任何机构都不能提出解决这个问题的想法,那将是非常好的。我正在开发iOS。缓存在VLC媒体播放器

这是AVcaching player catch的代码,并且希望VLC Media Player缓存也一样。

-(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]; 
    } 
} 

回答

3

MobileVLCKit不允许您以这种方式进行缓存。

你基本上有两个选择:

  • 信任VLC,它是做正确的事(或提供“--network缓存”,与以毫秒为单位所需的缓冲区大小的选项,默认值是300)
  • 将媒体自己缓存为文件并要求VLC播放该文件。就像使用桌面VLC一样,该文件不需要完整地适用于大多数格式。 MobileVLCKit的

未来版本将增加了第三种选择,即存储输入模块VLC,这样你就可以在内存中提供资料,而不将它们存储到本地第一,但是这不会是准备投产前今年下降。

+0

网络缓存是否会增加内存消耗,对不对?我尝试了不同的选择,但内存消耗没有改变。我也在初始化和VLCMedia options.VLCKit 3.0.1两种方式尝试此选项 –