嵌入在 UIWebView 中的 MPMoviePlayerController 中的视频流

Posted

技术标签:

【中文标题】嵌入在 UIWebView 中的 MPMoviePlayerController 中的视频流【英文标题】:Video streaming in MPMoviePlayerController embedded in UIWebView 【发布时间】:2014-11-07 11:05:17 【问题描述】:

我想知道如何在 ios 的 UIWebView 中嵌入的 MPMoviePlayerController 中执行网络流式传输。它是使用套接字还是任何其他方法执行的?

首先请理解我的问题,我正在 UIWebView 中播放 youtube 视频。当视频加载并开始播放时,MPMoviePlayerController(或类似的东西)会自动实例化。现在问题是我想通过我的代理服务器传递所有 url 以及一些私人消息。我正在使用以下方法:

方法 1

创建我自己的自定义 NSURLProtocol 类并拦截每个请求,然后打开一个套接字,编写我的私人消息,然后编写 GET/POST 消息并将响应传递给 webview。一切正常。但是当视频开始播放时,我们没有收到 url 请求,所以很难追踪 url 正在通过我的代理。

我在 SO 中读到 MPMoviePlayerController 不符合 NSURLProtocol,因此我们无法拦截流经视频控制器的请求。这是链接:

How to play movie with a URL using a custom NSURLProtocol?

方法 2

我覆盖 connect()、write() 和 read() 方法,然后打印日志以查看视频数据是否流经 read() 和 write() 方法。但我仍然没有得到想要的结果。我的所有其他网络请求都通过这些覆盖的方法,但只有 VideoData 没有显示,这意味着 MPMoviePlayerController 没有使用套接字和读取、写入方法。或者 Webview 在内部启动另一个进程来实例化 Player。

如何确保 MPMoviePlayerController 没有在内部创建新进程。

如果有人知道如何实现这一点,请分享。任何帮助表示赞赏。我陷入了困境。

【问题讨论】:

【参考方案1】:

您可以通过实现本地服务器来做到这一点。与其直接播放网络流,不如让它通过您的本地服务器并重定向它。这样,您也可以使用自己的自定义NSURLProtocol。 我也在使用这种方法为 HLS 流实现缓存协议。你可以试试here .另见CocoaHTTPServer

【讨论】:

以上是关于嵌入在 UIWebView 中的 MPMoviePlayerController 中的视频流的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱嵌入在 UIWebView 中的 youtube 视频周围的白色边框?

嵌入在 HTML5 中的视频不会在 UIWebView 中播放

UIWebView 中的嵌入式 youtube 播放器正在破坏视图层次结构

带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动

iOS 9 UIWebview 嵌入式视频全屏播放导致约束错误

UIWebView 故障中的视频链接