0

我正在尝试在我的应用程序中安装一个可以在后台播放的纯音频播放器。最初我使用了 MPMoviePlayerController,它工作得很好,但问题是它不支持向前和向后搜索(或使用滑块)。

有些录音长达一个小时,如果有人在录音过程中被打断并想回到他们原来的地方,他们必须从头开始。在我看来,使用 AVAudioCoder 似乎是解决方案,所以我更改了我的代码,发现它不适用于不在设备上的 URL。

我确实使用 Http Live Streaming,并且有一个 .m3u8 文件。是否有一种易于实施的解决方案来使用来自 Internet 源的 .m3u8 和 .mp3 文件,并且能够使用滑块更改播放位置。(因为它需要在后台播放,所以我不能使用 MPMoviePlayerController 的接口)

更新: 返回使用 MPMoviePlayerController,但有些奇怪的行为。在播放 .m3u8 播放列表,并设置新位置时,查询 currentPlaybackTime 时给出的值设置为正确的值,但声音继续播放,好像没有中断一样。

暂停播放器时,然后设置它只是忽略它并继续播放的时间,但至少“currentPlaybackTime”给出了正确的当前位置。

id appDelegate = (iDomsAppDelegate *)[[UIApplication sharedApplication] 委托]; 双倍长度 = [[appDelegate audioPlayer] 持续时间]; if(length > 0){ float sliderValue = [_slider value]; 双倍时间 = 滑块值 / 100 * 长度;

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]; 双倍长度 = [[appDelegate audioPlayer] 持续时间]; 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]];       
}

} 其他 { [_slider setEnabled:false]; [_unknownLength setText:[NSString stringWithFormat:@"总持续时间未知"]];
}

NSInteger 秒 = (int) 时间 % 60; NSInteger 分钟 = ((int) 时间 / 60) % 60; [_position setText: [NSString stringWithFormat:@"%02i:%02i", 分, 秒]];

4

1 回答 1

0

仅用于 FFMPEG 的音频分段无法正常工作,但现在已修复在 GIT 存储库的头部。使用 MPMoviePlayer 控制器现在可以完美运行,可以快速找到分段大小的步骤。

于 2012-07-16T12:11:20.860 回答