我正在尝试在iOS应用程序上播放由FlaskWeb应用程序提供服务的视频。虽然我可以播放“传统”web服务器(如Apache)提供的任何视频,但不能播放Flask提供的视频。以下是相关代码:
目标C
NSURL *videoURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@",videourltemp]];
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
playerViewController.player = player;
[self.view addSubview:playerViewController.view];
[self.navigationController pushViewController:playerViewController animated:YES];
Python
^{pr2}$旁注:如果我试图从浏览器访问我的网址,视频是正确加载。在
我怎样才能解决我的问题?在
提前谢谢你!在
你有两个选择:
打开文件并分块读取,而不是像在代码中那样将其作为单个blob读取。以下示例来自:https://stackoverflow.com/a/24318158/1955346:
使用来自How do I stream a file using werkzeug?的直接方法:
return Response(file("/root/media_assets/" + file["path"]), direct_passthrough=True)
我遇到了同样的问题,最终发现真正的问题是视频播放器客户端(至少在Objective-C iOS中)在响应中使用了“range”头(您可以打印出Flask
request.headers
进行检查)。换句话说,流媒体实际上是通过HTTP中的“range”支持来实现的。在我遵循了https://codeburst.io/the-taste-of-media-streaming-with-flask-cdce35908a50中的示例,Flask服务器代码需要使用“部分内容”(HTTP状态代码206)构建响应,并需要处理请求中的“range”头。相关代码如下:
- 在服务mp4文件的函数中,假设文件路径是“full-path”:
^{pr2}$在我的测试中,上面的Flask代码可以与iOS objective-C客户端以及Chrome、Firefox浏览器中的.mp4文件一起使用。在
相关问题 更多 >
编程相关推荐