当前位置: 首页 > 面试题库 >

不可能停止AVPlayer

鱼阳伯
2023-03-14
问题内容

我目前正在使用 Swift
测试将AVPlayer与音频流URL一起使用。有play()和pause()方法,但是问题在于,仅暂停,流仍会缓存在设备中。

这是我的测试代码:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    let player = AVPlayer(URL: NSURL(string: "http://streaming.radio.rtl.fr/rtl-1-48-192")!)

    @IBOutlet weak var btnPlay: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()            
    }

    @IBAction func btnPress(sender: AnyObject) {
        if (btnPlay.titleLabel?.text == "Play") {
            initPlayer()
            btnPlay.setTitle("Stop", forState: UIControlState.Normal)
        } else {
            stopPlayer()
            btnPlay.setTitle("Play", forState: UIControlState.Normal)
        }
    }

    func initPlayer()  {
        player.play()
    }

    func stopPlayer() {
        // player.currentItem = nil // Last thing I tried, but generate an error
        player.pause()
    }
}

这是尝试某些东西时的问题:

player = nil :“无法将’NilLiteralCOnvertible’类型的值分配给’AVPlayer’类型的值”

player.currentItem = nil :“无法分配给属性:’currentItem’是仅获取属性”

我尝试了所有操作,即使通过AVQueuePlayer也没有任何有效结果。(显然,因为我的情况下只有一件)。

如何 停止AVPlayer销毁其实例


问题答案:

如果声明player为可选变量,则可以将播放器设置nil为取消分配它。

愚蠢的例子,但它显示了会发生什么:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    @IBOutlet weak var btnPlay: UIButton!

    var player:AVPlayer?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func btnPress(sender: AnyObject) {
        if (btnPlay.titleLabel?.text == "Play") {
            initPlayer()
            btnPlay.setTitle("Stop", forState: UIControlState.Normal)
        } else {
            stopPlayer()
            btnPlay.setTitle("Play", forState: UIControlState.Normal)
        }
    }

    func initPlayer()  {
        if let play = player {
            print("playing")
            play.play()
        } else {
            print("player allocated")
            player = AVPlayer(URL: NSURL(string: "http://streaming.radio.rtl.fr/rtl-1-48-192")!)
            print("playing")
            player!.play()
        }
    }

    func stopPlayer() {
        if let play = player {
            print("stopped")
            play.pause()
            player = nil
            print("player deallocated")
        } else {
            print("player was already deallocated")
        }
    }
}


 类似资料:
  • 我正在制作一个基于体素的游戏,为了它的需要,我正在创建一个块渲染引擎。 重点是,我需要生成很多立方体。每次我渲染超过16x16x16块的theese块时,我的FPS几乎都会下降,因为它渲染了所有theese立方体的所有6个面。那是24576个四边形,我不想要。 所以,我的问题是,如何停止渲染不可见的顶点(或四边形),从而提高我的游戏性能? 以下是用于渲染块的类: 下面是呈现它们的代码:

  • 问题内容: 我正在尝试使用Linux下的ProcessBuilder类将mp3文件解码为wav文件。由于某些原因,该过程不会停止,因此我必须手动取消它。 有人可以给我一个提示。我认为引用的代码很容易重现: jstack的输出 问题答案: 您需要清空进程的输出(通过)和错误(通过)流,否则可能会阻塞。 引用过程文档: 由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此未能及时写入子流程的

  • 我有Visual Studio 2013,没有插件或任何花哨的东西。每当我编码时,每隔一段时间(可能每半小时一次),intellisense就会随机停止完成我的句子,或者在我按下Ctrl键时弹出。 我试过工具- 现在唯一能解决这个问题的就是关闭VS并重新打开它。但正如你所能想象的,这是非常令人沮丧的。

  • 问题内容: 单击导航中的每个链接,我正在播放一个小型音频剪辑 HTML代码: JS代码: 到目前为止,一切正常。 问题是,当声音剪辑已经在运行时,我单击任何链接都不会发生任何事情。 我尝试停止单击链接时已经播放的声音,但是HTML5的音频API中没有直接的事件 我尝试了以下代码,但无法正常工作 有什么建议吗? 问题答案: 相反,您可以尝试: 这应该具有预期的效果。

  • 我正试图按照下面的代码读取一个txt文件: 我的txt文件如下所示: 当我不使用变量I时,仅用于在控制台打印我的文件,我的代码可以完美地工作。你们能帮我吗?如何将每个数据分离到数组中?我是Java初学者。

  • 问题内容: 我想停止redis服务器,并且它一直在运行。我正在使用redis-2.6.7 检查它是否正在运行: 它显示“ … bind:地址已在使用中”,因此它已在运行。 我努力了 它只是挂起,没有任何反应。我中断检查,是的,它仍在运行。 我努力了 我得到“无法打开配置文件’停止’” 我试过了: 仍在运行。 我想要停止它的原因是,当我尝试通过Python设置或获取值时,它只是挂起了。所以我认为我会