2012-06-28 55 views
0

我想在我的應用程序中可以播放背景音頻的播放器。 最初我使用MPMoviePlayerController,它工作正常,但問題是它不支持向前和向後搜索(或使用滑塊)。只有音頻HLS和iOS

一些錄音的是一小時多頭,如果有人在它中斷,想回去的地方,他們也得從頭開始。使用AVAudioCoder似乎是我的解決方案,因此我更改了代碼,發現它不適用於不在設備上的URL。

我使用HTTP實時流,並有.m3u8文件。是否有一個容易實現的解決方案,可以使用來自Internet源的.m3u8和.mp3文件,並且可以使用滑塊更改播放位置。 (和它需要在後臺播放,我不能使用的MPMoviePlayerController的接口)

更新: 回到使用的MPMoviePlayerController,但一些奇怪的行爲。播放.m3u8播放列表並設置新位置時,查詢當前播放時間時給出的值設置爲正確的值,但聲音繼續播放,好像沒有中斷。

當暫停播放,然後設置它只是忽略它,並繼續播放時間,但至少「currentPlaybackTime」給出正確的當前位置。

ID的appDelegate =(iDomsAppDelegate *)[[UIApplication的sharedApplication]委託]; double length = [[appDelegate audioPlayer] duration];如果(長度> 0),則float sliderValue = [_slider value]; double time = sliderValue/100 * length;

NSTimeInterval playBackTime = time; 

NSLog(@"Requested time: %f vs current time %f", playBackTime, [[appDelegate audioPlayer] currentPlaybackTime]); 
//[[appDelegate audioPlayer] pause]; 
[[appDelegate audioPlayer] setCurrentPlaybackTime:playBackTime]; 
//[[appDelegate audioPlayer] setInitialPlaybackTime:playBackTime]; 
//[[appDelegate audioPlayer] play]; 
NSLog(@"Requested time: %f vs current time %f (2)", playBackTime, [[appDelegate audioPlayer] currentPlaybackTime]); 

}

每一秒我更新標籤,這給了我的行爲如上所述:

ID的appDelegate =(iDomsAppDelegate *)[[UIApplication的sharedApplication]委託];

雙時間= [[的appDelegate audioPlayer] currentPlaybackTime]; double length = [[appDelegate audioPlayer] duration]; 的NSLog(@ 「狀態:%I,時間:%F」,[[的appDelegate audioPlayer] playbackState],[[的appDelegate audioPlayer] currentPlaybackTime]);如果(長度> 0){ double pos = time/length * 100; [_slider setValue:(float)pos]; [_slider setEnabled:true];

NSInteger seconds = (int) length % 60; 
NSInteger minutes = ((int) length/60) % 60; 

double playableDuration = [[appDelegate audioPlayer] playableDuration]; 
if(playableDuration > 0 && playableDuration < length){ 
    int downloaded = (int)((float)((float)playableDuration/(float)length) * 100); 
    [_unknownLength setText:[NSString stringWithFormat:@"Total duration: %02i:%02i (%02i%% downloaded)", minutes, seconds, downloaded]]; 
} else { 
    [_unknownLength setText:[NSString stringWithFormat:@"Total duration: %02i:%02i", minutes, seconds]];  
} 

}否則{ [_slider的setEnabled:假]; [_unknownLength setText:[NSString stringWithFormat:@「Total duration unknown」]];
}

NSInteger seconds =(int)time%60; NSInteger分鐘數=((int)time/60)%60; [_position setText:[NSString stringWithFormat:@「%02i:%02i」,minutes,seconds]];

+0

你爲什麼認爲MPMoviePlayerController不支持尋找HTTP Streaming? – Till

+0

好問題。我認爲將播放頭移動到某個位置是一種私人方法,但重新閱讀MPMediaPlayback協議的規範似乎意味着不同。不知道爲什麼它不工作,但我會再看看。 –

+0

放心吧,它就像一個魅力。 :D – Till

回答

0

音頻僅用於FFMPEG的分段無法正常工作,但現在已固定在GIT倉庫的頭部。使用MPMoviePlayer控制器現在可以完美工作,能夠快速查找分段大小的步驟。