iOS开发swift -- PLMediaStreamingKit七牛直播推流的使用

一 PLMediaStreamingKit简介

PLMediaStreamingKit 是一个适用于 iOS 的 RTMP 直播推流 SDK,可高度定制化和二次开发。SDK 提供 RTMP 推流的全套解决方案,包括采集,处理(美颜,水印等),编码,封包,发送。特色是支持 H.264 硬编码,以及支持 AAC-LC 硬编码;同时,还根据移动网络环境的多变性,实现了一套可供开发者灵活选择的编码参数集合。
相关链接

二 sdk集成 CocoaPods

$ cd/你的项目地址
$ pod init
$ open -a Xcode Podfile

platform :ios, '9.0'
target '你的项目' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!
  pod 'PLMediaStreamingKit', '~> 2.2.1'
end
$ pod install

三 相关配置

    NSAppTransportSecurity
    
        NSAllowsArbitraryLoads
        
    
    NSCameraUsageDescription
    使用相机
    NSMicrophoneUsageDescription
    使用扩音器

四 代码示例

    func createView() {
        
        //创建视频和音频的采集和编码配置对象 当前使用默认配置,之后可以深入研究按照自己的需求作更改
        let videoCaptureConfig = PLVideoCaptureConfiguration.default()
        let audioCaptureConfig = PLAudioCaptureConfiguration.default()
        let videoStreamingConfig = PLVideoStreamingConfiguration.default()
        let audioStreamingConfig = PLAudioStreamingConfiguration.default()
        
        //创建推流 session 对象
        session = PLMediaStreamingSession.init(videoCaptureConfiguration: videoCaptureConfig, audioCaptureConfiguration: audioCaptureConfig, videoStreamingConfiguration: videoStreamingConfig, audioStreamingConfiguration: audioStreamingConfig, stream: nil)
        session.delegate = self
        //开启美颜模式
        session.setBeautifyModeOn(true)
        //自动重连
        session.isAutoReconnectEnable = true
        //预览摄像头拍摄效果
        view.addSubview(session.previewView)
        

        button = UIButton.init(type: .custom)
        button.setTitle("推流", for: .normal)
        button.setTitleColor(UIColor.red, for: .normal)
        button.addTarget(self, action: #selector(buttonclick(button:)), for: .touchUpInside)
        view.addSubview(button)
        
        button.snp.makeConstraints { (make) in
            make.centerX.centerY.equalTo(view)
        }
    }
    
    func buttonclick(button : UIButton)  {
        session.startStreaming(withPush: NSURL.init(string: "")! as URL) { (feedback) in
            if feedback == PLStreamStartStateFeedback.success {
                print("successful")
            }else
            {
                self.session.stopStreaming()
            }
        }
        
    }
    
    // MARK: - PLMediaStreamingSessionDelegate
    
    func mediaStreamingSession(_ session: PLMediaStreamingSession!, rtcStateDidChange state: PLRTCState) {
        //只有在正常连接,正常断开的情况下跳转的状态才会触发这一回调。所谓正常连接是指通过调用 -startStreamingWithFeedback: 方法使得流连接的各种状态,而所谓正常断开是指调用 -stopStreaming 方法使得流断开的各种状态。所以只有以下四种状态会触发这一回调方法。
        //PLStreamStateConnecting
        //PLStreamStateConnected
        //PLStreamStateDisconnecting
        //PLStreamStateDisconnected
    }
    
    func mediaStreamingSession(_ session: PLMediaStreamingSession!, didDisconnectWithError error: Error!) {
        //除了调用 -stopStreaming 之外的所有导致流断开的情况,都被归属于非正常断开的情况,此时就会触发该回调。对于错误的处理,我们不建议触发了一次 error 后就停掉,最好可以在此时尝试有限次数的重连
    }
    
    func mediaStreamingSession(_ session: PLMediaStreamingSession!, streamStatusDidUpdate status: PLStreamStatus!) {
        //默认情况下,该回调每隔 3s 调用一次,每次包含了这 3s 内音视频的 fps 和总共的码率(注意单位是 kbps)。你可以通过 PLMediaStreamingSession 的 statusUpdateInterval 属性来读取或更改这个回调的间隔。
    }

你可能感兴趣的:(iOS开发swift -- PLMediaStreamingKit七牛直播推流的使用)