在UIWebView中播放Youtube视频但不全屏显示

9

我想在我的应用程序中嵌入一个Youtube视频。但是通常的技术是,在UIWebView中嵌入Youtube视频,当用户点击后,它会自动启动MPMoviePlayerController。但这会全屏幕播放。如何在MPMoviePlayerController中播放此Youtube视频,而不进入全屏模式。我希望将其显示在屏幕的一半。

5个回答

8
有几种方法可以实现这个目标。除了设置之外:
videoView.allowsInlineMediaPlayback = YES;

最简单、最粗暴的方式是禁用控件,方法如下:

方法1

注意:添加controls: 0

const player = new YT.Player("player", {
  width: "100%",
  height: "50%",
  videoId: "[your video id]",
  playerVars: {
    controls: 0,
    rel: 0,
    modestbranding: 1,
    html5: 1,
    showinfo: 0,
  },
});

方法二

HTML嵌入iFrame代码(注意&controls=0和/或&playsinline=1

<iframe
  id="ytplayer"
  type="text/html"
  width="100%"
  src="http://www.youtube.com/[your_video_id]?autoplay=1&controls=0&playsinline=1&modestbranding=1&rel=0&showinfo=0&autohide=1&html5=1"
  webkit-playsinline
  frameborder="0"
></iframe>;

你只需添加&playsinline=1(或在JavaScript中的情况下在playerVars内部添加playsinline:1)即可。在这种情况下,用户仍然可以全屏观看,但播放器应在您视图的边框内正常启动。希望这可以帮到你。

2
你有这方面的工作示例吗?那将是非常有帮助的。 - Jasmeet

6

我正在使用一个被定义为YTPlayerView的UIView来播放视频。

我按照此教程进行操作:在YouTube中嵌入视频的教程

我创建了一个字典,然后将其添加到videoId定义中(即我要播放哪个视频)。

来自YouTube教程:

用以下代码替换loadWithVideoId调用:

OBJECTIVE-C

 NSDictionary *playerVars = @{
   @"playsinline" : @YES,
 };

[self.playerView loadWithVideoId:@"M7lc1UVf-VE" playerVars:playerVars];

Swift 2.1:

   var playerVars = ["playsinline" : 1]

   videoId.loadWithVideoId(["videoId"], playerVars: playerVars)

这将在尝试播放视频时禁用全屏功能,同时也允许用户进行全屏操作。希望能对某些人有所帮助。

这是否违反了Youtube API的服务条款? - Roi Mulia
不是这样的。每个人都在使用它。@RoiMulia - Lukesivi
@Lukesivi,你的分享链接包含Objective-C代码。你能否分享一些Swift代码链接? - Muju

4

2

将视频包装在HTML5文件中,并在<video>标签的属性中添加webkit-playsinline。然后设置webView.allowsInlineMediaPlayback = YES; 对我来说这很完美。


0

目前似乎还没有办法使用MPMoviePlayerController来实现这个功能,但是使用UIWebView的最佳解决方法是由Youtube开源的YTPlayer。您可以在Github上获取源代码,然后只需按照此tutorial进行操作即可。

我只是简单地按照那个教程进行了操作,它运行得非常好,并且相当可定制。全屏播放在一个AVFullScreenViewController中,这是一个系统标准,因此,它可以旋转以获得更好的全屏观看体验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接