14

我开发具有视频播放支持iPhone应用程序。我正在使用带自定义控件的MPMoviePlayerController来播放视频。为此,我将MPMoviePlayerController的控件样式设置为MPMovieControlStyleNone。支持AirPlay,以及的MPMoviePlayerController关系MPVolumeView

我想支持AirPlay的功能的视频正在播放。根据文档,我们必须将MPMoviePlayerController的'allowedAirPlay'属性设置为YES以启用AirPlay功能。如果我在自定义控件上使用MPMoviePlayerController,如何在播放器UI上显示AirPlay按钮?

我曾尝试以下:

  1. 实例化MPVolumeView
  2. 设置MPVolumeView的showsRouteButton和showsVolumeSlider属性NO隐藏音量滑块和路线按钮
  3. 添加MPVolumeView我的自定义播放器查看

我没有给MPVolumeView和的MPMoviePlayerController的相互参考。 但是,如果MPMoviePlayerController的'allowedAirPlay'设置为YES,则AirPlay按钮将显示在MPVolumeView上。 MPVolumeView和MPMoviePlayerController如何相关?请让我知道这两个独立创建的类之间的连接。

感谢和问候, 迪帕

+0

对此有何更新? – spd 2011-04-25 03:44:58

+0

您无法使用自定义控制栏。唯一可以显示airplay按钮(不篡改Apple代码)的地方是使用标准控制栏。 – lostInTransit 2011-06-07 06:41:39

+0

希望这可以通过5中的AirPlay更新来解决。0 – 2011-06-07 15:04:20

回答

10

由于的MPMoviePlayerController只允许一次播放一个视频,将MediaPlayer的框架总是知道正在播放的视频。这就是MPVolumeView对MPMoviePlayerController的了解。我没有官方文档,但我想这是通过这种方式进入框架的。

因为有可能很多制衡的事情(和他们热爱一致的用户界面),苹果只允许你使用自己的AirPlay按钮/ UI为进军这个功能。你可以,但是,把那个按钮,无论你想:

airplayButton = [[MPVolumeView alloc] init]; 
airplayButton.frame = CGRectMake(myX, myY, 40, 40); 
[airplayButton setShowsVolumeSlider:NO]; 
[customPlayerControls.view addSubview:airplayButton]; 

我只是猜的宽度,高度为40,40和我敢肯定,这是不正确的,但一旦我在地方得到了按钮,它没没关系。

+0

但是,这并没有回答我的问题 – spd 2011-08-09 03:36:48

+2

您请教两个问题: >如何显示在我的播放器UI上的AirPlay按钮,如果我使用的MPMoviePlayerController与自定义控件? 代码片段回答了这个问题。创建一个MPVolumeView的实例,隐藏它的音量滑块,你留下了Airplay按钮。设置其框架并将其添加到视图中。这会在您的控件中放置一个功能完整的Airplay按钮。它仅在范围内存在启用Airplay的设备时才会显示。 [要改变外观]:http://stackoverflow.com/questions/5730973/airplay-support-mpmovieplayercontroller-and-mpvolumeview-relation/6988562#6988562 – devdavid 2011-08-09 21:45:07

+0

>如何MPVolumeView和相关的MPMoviePlayerController? 它们都是MediaPlayer框架的一部分,因此,当MPMoviePlayerController播放电影时,框架“知道”它。由于MPVolumeView在框架中,它“知道”它。这就是为什么你不需要将任何MPMoviePlayerController引用传递给Airplay按钮 - 它已经知道了。 – devdavid 2011-08-09 21:45:25

2
for (UIButton *button in volumeView.subviews) { 
if ([button isKindOfClass:[UIButton class]]) { 
    [button setImage:[UIImage imageNamed:@"custom-route-button.png"] forState:UIControlStateNormal]; 
    [button sizeToFit]; 
}} 

我认为这会帮助你。

+0

此解决方案有可能会被Apple拒绝应用程序。但是,它目前是唯一可用的解决方案。 +1 – Till 2011-06-05 03:10:41

+0

@Till:由于此解决方案不使用任何私有API,因此Apple不会拒绝它。事实上,我们做类似的事情(自定义音量滑块),其他应用也会这样做。如果Apple选择更改布局,以便该按钮不再是直接子视图,则代码将不再工作,但它不会造成任何有害影响。 – DarkDust 2012-07-09 07:23:39

+0

@DarkDust使用非私有API方法不会阻止拒绝。苹果公司显然不打算改变苹果的标准控制也会增加这种风险。此解决方案仍然有效,并且**目前**不受Apple的拒绝。 – Till 2012-07-09 08:25:59

0

答案是:你不能。从iOS 4.3开始,没有官方方法为Airplay提供自己的控件 - 如果需要该功能,则需要使用标准控件。

2

的MPVolumeView具有隐藏音量滑块和显示路由按钮的属性。所以没有必要遍历视图隐藏的东西。

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:myContainerView.bounds] autorelease]; 
volumeView.showsVolumeSlider = NO; 
volumeView.showsRouteButton = YES; 
[myContainerView addSubview:volumeView]; 

的AirPlay的(路线)按钮的位置可能不是你所期望的,所以你可能要玩容器的框架查看了一下,得到它,你想要的吧。

+0

你说得对。我想在电影播放前播放:( – spd 2012-03-12 11:38:53

相关问题