Closed pzs7602 closed 8 years ago
// 1st step: Comment-out line
// rtmpStream.attachCamera(AVMixer.deviceWithPosition(.Back))
// 2nd step: Remove Comment-out Line
rtmpStream.attachScreen(ScreenCaptureSession())
thanks! it works. can rtmpStream attach both camera and screen capture?
library has no this feature. I think can create this feature. custom VIsualEffect Plugin.
// example Custom VisualEffect
final class CameraMixEffect: VisualEffect, AVCaptureVideoDataOutputSampleBufferDelegate {
let filter:CIFilter? = CIFilter(name: "CISourceOverCompositing")
var camera:CIImage?
var lockQueue:dispatch_queue_t? dispatch_queue_create(
"CameraMixEffect.lock", DISPATCH_QUEUE_SERIAL
)
override init() {
super.init()
}
override func execute(image: CIImage) -> CIImage {
guard let filter:CIFilter = filter else {
return image
}
dispatch_async(lockQueue) {
self.filter.setValue(camera, forKey: "inputImage")
self.filter.setValue(image, forKey: "inputBackgroundImage")
}
return filter.outputImage!
}
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
guard let image:CVImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}
camera = CIImage(CVPixelBuffer: image)
}
}
// next
var session = AVCaptureSession()
var videoOutput = AVCaptureVideoDataOutput()
session.addInput(try! AVCaptureDeviceInput(device: camera))
session.addOutput(videoDataOutput)
var effect = CameraMixEffect()
videoOutput.setSampleBufferDelegate(effect, queue: effect.lockQueue)
var stream:RTMPStream = RTMPStream()
stream.registerEffect(effect)
I try this, but the camera image does not shown over the device screen, perhaps the camera image's position or size must be set properly? I can get the image data from didOutputSampleBuffer method and display it on the screen, that also what I need. anyway, thank you very much!
Is this solution still work? Consider about adding some UIView from screen as a layer to Device Camera for a better quality in comparison with recording screen (which result in high CPU + low FPS).
please give me some code snippet,thanks!