我正在尝试在我的应用程序中有一个可以在后台播放的音频播放器。 最初我使用了MPMoviePlayerController,它运行良好,但问题是它不支持向前和向后搜索(或使用滑块)。
有些录音长达一小时,如果有人在录音期间被打断并想回到原地,那么他们必须从头开始。在我看来使用AVAudioCoder是解决方案所以我改变了我的代码,发现它不适用于设备上没有的URL。
我确实使用Http Live Streaming,并且有一个.m3u8文件。是否有一个易于实现的解决方案,使用来自互联网源的.m3u8和.mp3文件,并能够使用滑块更改播放位置。 (因为它需要在后台播放,我不能使用MPMoviePlayerController的界面)
更新 回来使用MPMoviePlayerController,但有些奇怪的行为。播放.m3u8播放列表并设置新位置时,查询currentPlaybackTime时给出的值设置为正确的值,但声音继续播放,好像没有中断。
暂停播放器时,设置时间只是忽略它并继续播放,但至少'currentPlaybackTime'给出正确的当前位置。
id appDelegate =(iDomsAppDelegate *)[[UIApplication sharedApplication] delegate]; double length = [[appDelegate audioPlayer] duration]; if(length> 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] delegate];
double time = [[appDelegate audioPlayer] currentPlaybackTime]; double length = [[appDelegate audioPlayer] duration]; NSLog(@“状态:%i,时间:%f”,[[appDelegate audioPlayer] playbackState],[[appDelegate audioPlayer] currentPlaybackTime]); if(length> 0){ double pos =时间/长度* 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]];
}
} else {
[_slider setEnabled:false];
[_unknownLength setText:[NSString stringWithFormat:@“总持续时间未知”]];
}
NSInteger seconds =(int)time%60; NSInteger分钟=((int)时间/ 60)%60; [_position setText:[NSString stringWithFormat:@“%02i:%02i”,分钟,秒]];
答案 0 :(得分:0)
仅针对FFMPEG的音频分段无法正常工作,但现在已在GIT仓库的头部修复。使用MPMoviePlayer控制器现在可以很好地工作,可以快速找到分段大小的步骤。