VLCMediaPlayer.startRecording(atPath:) not working in Swift from RTSP streaming
MobileVLCKit startRecording works but returns false and delegate returns nil for record path
//-----------------------Coding---------------------------
import UIKit
import MobileVLCKit
class PlaybackViewController: UIViewController {
let mediaURL = "https://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"
@IBOutlet weak var movieView: UIView!
var mediaPlayer = VLCMediaPlayer()
var videoFilename = "rendersf"
var videoFilenameExt = "mkv"
var tempUrl = ""
override func viewDidLoad() {
super.viewDidLoad()
tempUrl = outputURL.absoluteString + "\(videoFilename).\(videoFilenameExt)"
setupMediaPLayer()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
mediaPlayer.play()
}
func setupMediaPLayer() {
let media = VLCMedia(url: URL(string: mediaURL)!)
mediaPlayer.delegate = self
mediaPlayer.drawable = movieView
mediaPlayer.media = media
mediaPlayer.libraryInstance.debugLogging = true
}
@IBAction func handlePlayPause(_ sender: UIButton) {
if mediaPlayer.isPlaying {
mediaPlayer.pause()
sender.isSelected = true
} else {
mediaPlayer.play()
sender.isSelected = false
}
}
@IBAction func recordStartStop(_ sender: UIButton) {
if sender.isSelected == false {
sender.isSelected = true
print("fileURL: \(tempUrl)")
let idd = self.mediaPlayer.startRecording(atPath: tempUrl)
if idd == true {
print("------------Mila---------------")
}else{
print("-------------Oooo---------------")
}
}else{
sender.isSelected = false
self.mediaPlayer.stopRecording()
}
}
var outputURL: URL {
let fileManager = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
return fileManager
}
}
extension PlaybackViewController: VLCMediaPlayerDelegate {
func mediaPlayerStartedRecording(_ player: VLCMediaPlayer) {
print("----mediaPlayerStartedRecording: \(player)-------------")
}
func mediaPlayer(_ player: VLCMediaPlayer, recordingStoppedAtPath path: String) {
print("----recordingStoppedAtPath: \(path)-------------")
}
func mediaPlayerStateChanged(_ aNotification: Notification) {
guard let videoPlayer = aNotification.object as? VLCMediaPlayer else {return}
switch videoPlayer.state{
case .playing:
print("VLCMediaPlayerDelegate: PLAYING")
case .opening:
print("VLCMediaPlayerDelegate: OPENING")
case .error:
print("VLCMediaPlayerDelegate: ERROR")
case .buffering:
print("VLCMediaPlayerDelegate: BUFFERING")
case .stopped:
print("VLCMediaPlayerDelegate: STOPPED")
case .paused:
print("VLCMediaPlayerDelegate: PAUSED")
case .ended:
print("VLCMediaPlayerDelegate: ENDED")
case .esAdded:
print("VLCMediaPlayerDelegate: ELEMENTARY STREAM ADDED")
default:
break
}
}
Note: Please help me if you have any ideas.