如何使用 youtube-ios-player-helper 库在 iOS 中更改 youtube 视频的音量

How to change the volume of a youtube video in iOS using youtube-ios-player-helper library

我使用名为 "youtube-ios-player-helper" 的 iOS 库将 YouTube 视频嵌入到我的 iOS 应用程序中。但是,我无法更改音量,而且库中似乎没有这样做的功能。所以我想添加这个功能。

我查看了库的主文件 (YTPlayerView.m) 以尝试了解如何做到这一点: https://github.com/youtube/youtube-ios-player-helper/blob/master/Classes/YTPlayerView.m

在这个文件中有一些对 javascript 函数的调用,这些函数是由 google 在他们的 Youtube API 中调用的。给出的参考是 https://developers.google.com/youtube/iframe_api_reference#setVolume 我在这个参考资料上发现有一个改变音量的功能,即

player.setVolume(volume:Number):Void

加上描述:"Sets the volume. Accepts an integer between 0 and 100."

我几乎完全不知道 Objective-C,但是使用 YTPlayerView.m 中其他函数的复制粘贴(尤其是函数 seekToSeconds),我添加了以下函数,这应该是调用 Youtube API javascript 函数。

- (void)setVolume:(int)volume {
    NSString *command = [NSString stringWithFormat:@"player.setVolume(%d);", volume];
    NSLog(@"%@",command); // for debugging
    [self stringFromEvaluatingJavaScript:command];
}

我还在库 .h 文件中添加了对函数的引用:

- (void)setVolume:(int)volume;

然后我使用

从我的 swift 代码中调用它
@IBOutlet weak var youtubeView: YTPlayerView!

override func viewDidLoad() {
   youtubeView.setVolume(Int32(20)) 

   videoID = "QDYfEBY9NM4"
   let playerVars: [AnyHashable: Any] =
            ["playsinline" : 1,
             "origin": "https://www.youtube.com"]
   self.youtubeView.load(withVideoId: videoID, playerVars: playerVars)

   youtubeView.setVolume(Int32(20)) // called twice just in case
}

@IBAction func playButtonClicked(_ sender: Any) {
    youtubeView.playVideo()
}

尝试减小视频的音量,默认为 100。修改整个 phone 的音量并不能解决我的问题,因为我同时在应用程序中播放其他声音,我想要的是相对于其他声音减少 youtube 声音。

代码运行,调用了我做的函数(我知道这要感谢里面的 NSLog),但是视频的声音并没有减弱,即使我把值设置为零而不是那里的 20没有任何影响。

你知道怎么做吗?

您还必须更改 phone:

的音量

试试这个:

#import <MediaPlayer/MediaPlayer.h>
musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
musicPlayer.volume = 0; // min volume (mute)

希望对您有所帮助!

编辑 1:

我添加了您的辅助函数以使其更易于使用。

- (void)setVolume:(int)volume {
    NSString *command = [NSString stringWithFormat:@"player.setVolume(%d);", volume];
    NSLog(@"%@",command); // for debugging
    [self stringFromEvaluatingJavaScript:command];

    #import <MediaPlayer/MediaPlayer.h> // JUST MAKE SURE THIS IS IMPORTED
    musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
    musicPlayer.volume = volume; // min volume (mute)
}

这也会更改设备音量。因此,每当您更改 YouTube 视频的音量时,设备音量也会随之更改。

希望对您有所帮助!

我尝试使用另一种方式(向库中添加一个函数 https://github.com/hmhv/YoutubePlayer-in-WKWebView ) 但仍然无效。

我还发现这个 post 有人有类似的问题但没有设法解决它: Youtube API setvolume not working on iOS?

所以当 youtube reader 嵌入 iOS WebView 时,iFrame Youtube API 的 setVolume() 函数似乎不起作用。

问题终于解决了!我们现在可以在 iOS 上以编程方式更改 youtube 的音量 :) 我将解决方案放在 github 上: https://github.com/nicokla/volumeYoutubeIosOk