标签: progressive-download

下载iOS时流视频

我正在使用iOS 7,我有一个.mp4视频,我需要在我的应用程序中下载.视频很大(约1 GB),这就是为什么它不包含在应用程序中的原因.我希望用户能够在开始下载后立即开始观看视频.我还希望视频能够在iOS设备上缓存,以便用户以后不需要再次下载.播放视频的常规方法(渐进式下载和实时流式传输)似乎都不允许您缓存视频,因此我创建了自己的Web服务,将视频文件分块并将字节流式传输到客户端.我使用NSURLConnection启动流式HTTP调用:

self.request = [[NSMutableURLRequest alloc] initWithURL:self.url];
[self.request setTimeoutInterval:10]; // Expect data at least every 10 seconds
[self.request setHTTPMethod:@"GET"];
self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:YES];
Run Code Online (Sandbox Code Playgroud)

当我收到数据块时,我将它附加到文件的本地副本的末尾:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
     NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:[self videoFilePath]];
     [handle truncateFileAtOffset:[handle seekToEndOfFile]];
     [handle writeData:data];
}
Run Code Online (Sandbox Code Playgroud)

如果我让设备运行,文件下载成功,我可以使用MPMoviePlayerViewController播放它:

NSURL *url=[NSURL fileURLWithPath:self.videoFilePath];
MPMoviePlayerViewController *controller = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
controller.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
[self presentMoviePlayerViewControllerAnimated:controller];
Run Code Online (Sandbox Code Playgroud)

但是,如果我在文件完全下载之前启动播放器,则视频开始播放就好了.它甚至可以在顶部擦洗条上显示正确的视频长度.但是当用户到达视频中我在视频开始之前完成下载的位置时,视频就会挂起.如果我关闭并重新打开MPMoviePlayerViewController,那么视频会播放,直到它到达我再次启动MPMoviePlayerViewController时的任何位置.如果我等到整个视频下载完毕,那么视频播放没有问题.

我没有收到任何事件,或者在发生这种情况时打印到控制台的错误消息(视频启动后永远不会发送MPMoviePlayerPlaybackStateDidChangeNotification和MPMoviePlayerPlaybackDidFinishNotification).似乎还有其他东西告诉控制器视频的长度是什么,而不是洗涤器使用的...

有谁知道可能导致这个问题的原因是什么?我不一定要使用MPMoviePlayerViewController,所以如果在这种情况下使用不同的视频播放方法,我就是为了它.

相关未解决的问题:

使用AVURLAssets进行AVPlayer和逐行视频下载

iOS上的渐进式视频下载

如何在IOS中下载进度视频文件

更新1 我发现视频停顿确实是因为视频开始播放时的文件大小.我可以通过在开始下载之前创建一个归零文件来解决这个问题,并在我去的时候覆盖它.由于我可以控制视频流服务器,因此我添加了一个自定义标头,因此我知道正在流式传输的文件的大小(流式文件的默认文件大小标头为-1).我在didReceiveResponse方法中创建文件,如下所示:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{        
    // Retrieve the size …
Run Code Online (Sandbox Code Playgroud)

video-streaming progressive-download mpmovieplayer ios nsurlsessiondownloadtask

12
推荐指数
2
解决办法
1万
查看次数

缓存在MPMoviePlayerController中逐行下载的内容

我有一个在iphone(sdk 4)中实现的音乐播放器,它可以与Mp3(即时转码)或原始渐进式下载一起使用.

反正有没有让渐进式下载的内容(我不直接控制)被缓存,所以它不会重新下载整个内容?

或者是否需要控制全局缓存设置?(另一方面,我使用ASIHTTP API联系我的HTTP服务器并访问允许缓存的数据).

提前致谢.

iphone caching mpmovieplayercontroller progressive-download

11
推荐指数
1
解决办法
2183
查看次数

使用AVURLAssets进行AVPlayer和逐行视频下载

我们正在开发一款需要通过AVPlayer播放视频文件的应用.文件需要存储在用户的设备上,但也必须在下载时播放.

目前我们已经构建了一个下载模块,该模块使用ASIHTTPRequest库通过PHP获取视频文件(我们不希望媒体可以通过公共URL链接)并将它们异步写入磁盘.

然后我们根据AV Foundation Programming Guide设置AVPlayer ,使用AVURLAsset获取文件,使用资产制作AVPlayerItem,使用项目构建AVPlayer,然后将播放器设置为AVPlayerLayer.播放器在完全下载的视频文件中运行正常,并且还可以在模拟器中完美地运行逐步下载的文件.

不幸的是,在实际设备上,播放器的行为发生了变化,相反,它似乎只加载了一次视频而不会尝试从磁盘中获取新的数据包.结果是播放器将视频和音频播放到视频中的点,该点标记了资源加载时下载进度的位置(例如,如果缓冲了2MB的数据,则创建播放器,播放器将仅播放2MB的数据).因为它有视频的标题,播放器会很高兴地继续认为它在视频的整个持续时间内播放,但没有其他视频呈现在屏幕上.

最后一个问题是,如果将视频插入AVComposition并使用该视频创建AVPlayer,则渐进式视频将正常播放.这将是一个很好的解决方案(无论如何我们的应用程序都是必需的),除了我们的应用程序的客户端要求视频可以通过AirPlay在Apple TV上播放,AVCompositions无法播放.

有没有人知道是否有办法使用AVURLAssets构建的AVPlayer逐步下载视频文件?有没有办法强制播放器/ playerItem使用AVURLAsset从磁盘读取,就像它看起来像AVComposition一样,而不是看似在内存中缓存视频?

谢谢!

progressive-download ios avplayer avcomposition avurlasset

11
推荐指数
1
解决办法
5393
查看次数

iPhone渐进式下载音频播放器

我正在尝试使用http和固定大小的mp3文件为iPhone实现渐进式下载音频播放器.

我找到了AudioStreamer项目,但它似乎非常复杂,并且在无尽的流中效果最佳.

我需要能够找出音频文件的总长度,我还需要能够在文件中查找.我发现了对AudioStreamer的黑客攻击,但它似乎对我来说效果不佳.http://www.saygoodnight.com/?p=14

我想知道是否有更简单的方法来实现我的目标,或者是否有更好的工作样本?我找到了低音库,但没有太多关于它的文档.

/ Br Johannes

iphone progressive-download audio-player

10
推荐指数
2
解决办法
4249
查看次数

在下载之前使用WinInet识别总文件大小

我从第三方网站获得了以下来源,解释了如何使用互联网下载文件WinInet.我对API并不太熟悉,我看了一下该WinInet单元,但没有看到任何API调用,就像我需要的那样.

我正在做的是添加报告下载文件进度的功能.这个程序我已经包含在一个内部,TThread一切正常.但是,只缺少一个:在下载之前查找源文件的总大小.

请参阅下面我有评论的地方//HOW TO GET TOTAL SIZE?这是我需要在开始下载之前找出文件总大小的位置.我该怎么做呢?因为这个代码在下载之前似乎不知道文件的大小 - 这使得这个添加无关紧要.

procedure TInetThread.Execute;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  S: Bool;
  D: Integer;
  T: Integer;
  procedure DoWork(const Amt: Integer);
  begin
    if assigned(FOnWork) then
      FOnWork(Self, FSource, FDest, Amt, T);
  end;
begin
  S:= False;
  try
    try
      if not DirectoryExists(ExtractFilePath(FDest)) then begin
        ForceDirectories(ExtractFilePath(FDest));
      end;
      hSession:= InternetOpen(PChar(FAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        hURL:= InternetOpenURL(hSession, PChar(FSource), nil, …
Run Code Online (Sandbox Code Playgroud)

delphi wininet download progressive-download delphi-xe2

9
推荐指数
1
解决办法
5528
查看次数

将Jpeg改为渐进式Jpeg图像

我想从基线Jpeg图像转换为渐进式Jpeg图像.
我的磁盘中存储了10,000张图像.
我尝试了一个网站,但它正在改变一个网站.http://www.imgonline.com.ua/eng/compress-image.php 但是我想要批量转换它们.

有没有在线工具或一些编程技巧?
然后,让我知道.

谢谢.

jpeg image progressive-download progressive

9
推荐指数
1
解决办法
6137
查看次数

如何在下载时在UIImageView中显示渐进式JPEG?

从网上下载图像并在UIImageView中显示它是相当容易的.但是,这需要在向用户显示图像之前完全下载图像,从而完全击败渐进式JPEG(和PNG)图像.

如何在传输过程中渲染部分下载的图像?我会想象SDK有一些回调函数可以更新图像,但我找不到这样的功能.使用当前的iOS SDK是否可行?

png jpeg progressive-download uiimageview ios

8
推荐指数
2
解决办法
7413
查看次数

使用webm和ogg编解码器启用"快速启动"渐进式下载是否有任何特定要求?

我知道,与mp4中,moov atom必须放置在文件的开头,使渐进式下载.这可以通过在创建文件时启用"faststart"来完成.

我很好奇在处理webmogg文件时是否有任何类似的要求,或者它们是否"默认为渐进式下载"?

video ogg progressive-download webm

8
推荐指数
1
解决办法
3444
查看次数

渐进式下载和流式传输的视频编码有何不同?

我想知道我们是否可以将相同的文件用于视频流和渐进式下载.他们的编码有什么不同吗?

例如,如果我有.flv文件,我是否可以使用相同的文件进行上述任何交付方法,而无需进行任何进一步操作?

任何人都可以建议任何描述如何实现渐进式下载的教程或文章吗?

video-streaming progressive-download

8
推荐指数
1
解决办法
1114
查看次数

iOS上的渐进式视频下载

我正在尝试在我的iOS应用程序中实现可以通过AVPlayer播放的视频的渐进式下载.我已经实现了一个下载器模块,可以将文件下载到iPad.但是,我发现我无法播放仍在写入的文件

所以,据我所知,我唯一的解决方案是通过下载文件'chunks'的列表,然后在准备好(即:下载)时继续播放每个文件,可能使用HLS

搜索我遇到过这个问题,通过hls实现渐进式下载,除此之外,我找不到别的办法

但是,我不断遇到搜索结果,说明如何配置Web服务器以利用iOS支持HTTP Progressive Downloading,但没有提到如何从iOS端执行此操作

那么,任何人对此都有任何想法和/或经验吗?

编辑:我还发现可能有一种方法可以通过其他方式(即:流式传输,然后将流式数据写入磁盘)这个问题提出但仍然无法使其工作,因为它似乎无法使用非本地资产!

avfoundation video-streaming progressive-download ios avplayer

7
推荐指数
1
解决办法
4687
查看次数