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

相關問題