一 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
三 相关配置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSCameraUsageDescription</key>
<string>使用相机</string>
<key>NSMicrophoneUsageDescription</key>
<string>使用扩音器</string>
四 代码示例
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 属性来读取或更改这个回调的间隔。
}