Gab*_*cal 20 iphone audio objective-c ios avplayer
我有一个AVPlayer与AVPlayerItem.我想要的是关闭AVPlayer音频播放.我想播放视频.
有人能帮我吗?谢谢!
self.avPlayerItem = [AVPlayerItem playerItemWithURL:self.videoUrl];
self.avPlayer = [AVPlayer playerWithPlayerItem:self.avPlayerItem];
[self.avPlayer play];
self.avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
self.avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidPlayToEndTime:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.avPlayerItem];
CGRect screenRect = [[UIScreen mainScreen] bounds];
self.avPlayerLayer.frame = CGRectMake(0, 0, screenRect.size.width , screenRect.size.height );
[self.view.layer insertSublayer:self.avPlayerLayer atIndex:0];
Run Code Online (Sandbox Code Playgroud)
Ann*_*awn 24
正如@Tung Fam的回答所示,你可以在你的应用程序中轻松地做到这一点来静音视频 -
player.isMuted = true
处理所有用例:
您可以使用上面的代码在静音上运行视频,问题是,如果您只是使用isMuted = true(比如说视频预览)它会起作用,但您的应用程序将"劫持" AVAudioSession操作系统,这意味着如果用户可以说,听音乐(spotify或苹果音乐),他们的音乐会被打断.这是因为您的应用程序将默认设置AVAudioSession为AVAudioSessionCategorySoloAmbient,这意味着您的应用程序将一旦开始播放视频,静音或取消静音,将始终中断在后台运行的所有音频会话.这可能不是一个非常令人愉快的用户体验并导致混淆.
您可能想要做的是,将您的视频静音显示为预览,同时用户继续在后台播放他们的歌曲.当用户使用您应用的视频进入全屏时,任何背景音频必须"暂停"或"中断",基本上您的应用程序将接管该应用AVAudioSession.然后,一旦完成播放视频,就可以恢复"中断"的背景音乐(例如:Spotify,Apple Music等).以下步骤完全实现了Twitter的应用程序处理视频和背景音乐的方式 -
在您的AppDelegate didFinishLaunchingWithOptions方法中,确保您的应用不会中断任何背景音乐.现在,由于您的视频将以"静音"运行,因此您可以简单地进行操作mixWithOthers.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
try AVAudioSession.sharedInstance().setActive(true)
}catch{//some meaningful exception handling}
Run Code Online (Sandbox Code Playgroud)当您的应用程序开始播放您的视频全屏(未静音/有声)时,您现在必须中断任何背景音乐.为此,在您再次player.play()设置之前AVAudioSession,就像这样 -
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
try AVAudioSession.sharedInstance().setActive(true)
}catch{//some meaningful exception handling}
Run Code Online (Sandbox Code Playgroud)
这将基本上暂停/中断正在进行的任何背景音频,让您的视频播放声音.
一旦您的视频播放完声音,您现在必须AVAudioSession知道它可以恢复被您中断的任何音频会话(即Spotify,苹果音乐,地图导航说明等).要做到这一点,一旦你的视频停止播放,你可以这样做 -
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
try AVAudioSession.sharedInstance().setActive(false, with: AVAudioSessionSetActiveOptions.notifyOthersOnDeactivation)
}catch{//some meaningful exception handling}
Run Code Online (Sandbox Code Playgroud)有关如何处理的更多选项,AVAudioSession以及这里的文档.而这里是苹果公司的使用指导原则AVAudioSession针对不同类型的应用程序.
这只是关于如何AVAudioSession使用的一个非常基本的解释,但根据您的应用程序的功能,可能需要使用KVO,AppDelegate方法(用于应用程序转到后台和/或前台等)来AVAudioSession适当地设置.进一步的警告是,你真的需要玩所有的选项,AVAudioSession因为它可能不会像你认为的那样工作,所以它可能变得有点累.更值得注意的是,令人惊讶的是,AVAudioSession除了Apple的文档以及此处有关于SO的一些问题之外,我发现很少有在线细节.底线是 - 如果您的应用处理音频/视频,那么强烈建议AVAudioSession根据Apple的" 应用类型音频指南 "的剧本进行适当处理,可能不是在您启动应用时,但肯定是因为您的应用成熟并变得更稳定.
Joe*_*eck 20
AVPlayer有选择权
@property (nonatomic, getter=isMuted) BOOL muted NS_AVAILABLE(10_7, 7_0);
Run Code Online (Sandbox Code Playgroud)
你可以写
- (void) muteSound:(BOOL)mute
{
self.avPlayer.muted = mute;
}
Run Code Online (Sandbox Code Playgroud)
并使用它,你想要的
- (void) startPlayingVideo
{
[self muteSound:YES];
//other code
}
Run Code Online (Sandbox Code Playgroud)
如果有人在寻找Swift 4:
player.isMuted = true // To mute the sound
player.isMuted = false // To un-mute the sound
Run Code Online (Sandbox Code Playgroud)
旁注:静音视频不会重置视频声音以启动.它只是一个常识性的静音功能.
| 归档时间: |
|
| 查看次数: |
10402 次 |
| 最近记录: |