在真实设备上,UIWebView 嵌入的 YouTube 视频没有声音

4

这是我嵌入视频的方法。在模拟器中有声音,但在真实设备(iOS 9.0.2 (13A452) Xcode 7.1.1)上没有声音。

这是我用来播放它的代码:

if let youtubeID = youtubeID {
    let embededHTML = "<html><body><iframe src=\"http://www.youtube.com/embed/\(youtubeID)?playsinline=1\" width=\"\(width)\" height=\"\(height)\" frameborder=\"0\" allowfullscreen></iframe></body></html>"
    cell!.webView.allowsInlineMediaPlayback = true
    cell!.webView.scalesPageToFit = true
    cell!.webView.mediaPlaybackAllowsAirPlay = true
    cell!.webView.mediaPlaybackRequiresUserAction = false

    cell!.webView.loadHTMLString(embededHTML, baseURL: NSBundle.mainBundle().bundleURL)
}

我已经按照上述方法操作,视频正在播放,但是(在窗口模式下)播放器的进度条不太流畅。你遇到过这样的问题吗? - Qadir Hussain
请回答以下问题:http://stackoverflow.com/questions/36404583/seekbar-fast-forward-not-working-smoothly-ytplayer-iframe-api-in-ios - Qadir Hussain
3个回答

14

大多数开发者都会遇到这个问题:他们忘记打开iPhone左侧的铃声按钮

对我很有用。


谢谢,我真是太傻了。 - Gauraang Khurana
有时候我们在开发应用的时候会忘记 iPhone 的主要功能。 - Nupur Sharma

8

对于SWIFT 2.0版本,我有同样的问题,解决方法是在AppDelegate中添加以下内容:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    }
    catch let error as NSError {
        print(error)  
    }

    do {
        try AVAudioSession.sharedInstance().setActive(true)
    }
    catch let error as NSError {
        print(error)  
    }

    // Override point for customization after application launch.
    return true
}

这将在我的UIWebView中启用声音。

第二个 do block{} 阻止了一些视频的播放。当我删除它时,它就可以工作了!只需使用第一个 do block{}。 - Nupur Sharma

6
我已经找到了答案: 这是解决方案:
        if let youtubeID = youtubeID {
            let embededHTML = "<!DOCTYPE html><html><head><style type=\"text/css\"> body { margin: 0; padding: 0; } body, html { height: 100%; width: 100%; } </style> </head> <body> <iframe id=\"player\" type=\"text/html\" width=\"100%\" height=\"100%\" src=\"http://www.youtube.com/embed/\(youtubeID)?enablejsapi=1&playsinline=1\" frameborder=\"0\"></iframe> <script> var tag = document.createElement('script'); tag.src = \"https://www.youtube.com/iframe_api\"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubeIframeAPIReady() { player = new YT.Player('player', { events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body></html>"

            cell!.webView.allowsInlineMediaPlayback = true
            cell!.webView.scalesPageToFit = true
            cell!.webView.mediaPlaybackAllowsAirPlay = true
            cell!.webView.mediaPlaybackRequiresUserAction = false
            cell!.webView.loadHTMLString(embededHTML, baseURL: NSBundle.mainBundle().bundleURL)
        }

我已经按照上述方法操作,视频正在播放,但是(在窗口模式下)播放器的进度条不太流畅。你遇到过这样的问题吗? - Qadir Hussain
我已经发布了一个关于此的新问题 http://stackoverflow.com/questions/36404583/seekbar-fast-forward-not-working-smoothly-ytplayer-iframe-api-in-ios - Qadir Hussain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接