如何使用 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
我使用名为 "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