使用 AVPlayer 播放音频时如何在 UIWebView 中暂停音频

Posted

技术标签:

【中文标题】使用 AVPlayer 播放音频时如何在 UIWebView 中暂停音频【英文标题】:How can I pause audio in UIWebView when I play audio use AVPlayer 【发布时间】:2016-06-08 14:04:42 【问题描述】:

我有一个UIWebView 播放音乐,当我使用AVPlayer 播放音频时,它们一起播放。

我尝试使用AVAudiosession 来控制它。但不工作。

这是我的代码

- (IBAction)click:(id)sender 

  NSURL *url = [NSURL URLWithString:@"http://mmmono.qiniudn.com/1c16bee1df0dbfbfea04ae11d8d8d021.mp3"];
  self.player = [AVPlayer playerWithURL:url];
  [self.player play];

  [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryAmbient error:nil];
  [[AVAudioSession sharedInstance] setActive: YES error: nil];


- (void)viewDidLoad 
  [super viewDidLoad];

  self.webView.mediaPlaybackRequiresUserAction = NO;
  NSURL *url = [NSURL URLWithString:@"http://mmmono.com/g/meow/560885/"];
  [self.webView loadRequest:[NSURLRequest requestWithURL:url]];

【问题讨论】:

复制/粘贴你的代码,不要放截图。链接可能会死掉,而且如果我们只想纠正一两行,我们必须重新输入它,而如果你复制/粘贴它,我们只需复制/粘贴它来修改它。 我认为当 UIWebView 加载页面或站点时,您可以停止播放音乐。否则,根据文档,无法知道是否播放了音乐。 【参考方案1】:

永远不要尝试这个,但您可以使用 javascript 和 UIWebView stringByEvaluatingJavaScriptFromString 来查找 WebView 上的所有音频标签,并使用 javascript“pause()”函数设置每个 DOM 停止播放音频。

准备javascript函数。 (如果您有该网站的 html、javascript,您可以直接在 .js 文件或<script> 标记中编写下面的函数)

NSString *pauseScriptString = @"function pauseAllAudio() \
  var audios = document.getElementsByTagName(\"audio\");\
  if(audios.length > 0)\
  for(var i = 0; i< audios.length; i++)\
    audios[i].pause();\
  \
 \
";

将 javascript 加载到 webview,以便稍后调用它执行。

[yourWebview stringByEvaluatingJavaScriptFromString: pauseScriptString];

执行暂停脚本

[youWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"pauseAllAudio()"]];

【讨论】:

以上是关于使用 AVPlayer 播放音频时如何在 UIWebView 中暂停音频的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVPlayer 时防止背景音频静音

如何知道 AVPlayer 何时使用仅音频比特率?

iOS音频篇:AVPlayer的缓存实现

同时播放两个 AVPlayer 音频文件时出现音频故障

如何在 iOS 中使用 AVPlayer 缓冲音频?

防止无音频 AVPlayer 暂停背景音频