使用AVCaptureSession重建应用程序(文件路径url保存到coreData)时不播放视频
文件路径在重建前后未更改。
file:///private/var/mobile/Containers/Data/Application/3DA93FBC-9A20-40B4-A017-B3D5C7768301/tmp/63F6CEED-3202-4F5F-999B-5F138D73635D.mp4
我做了所有的方法,没有任何效果
这是我录制视频的代码
func setupPreview() {
// Configure previewLayer
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer?.frame = shapeLayer.bounds
previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
shapeLayer.layer.addSublayer(previewLayer!)
}
func setupSession() -> Bool {
captureSession.sessionPreset = AVCaptureSession.Preset.high
// Setup Camera
let camera = AVCaptureDevice.default(for: AVMediaType.video)!
do {
let input = try AVCaptureDeviceInput(device: camera)
if captureSession.canAddInput(input) {
captureSession.addInput(input)
activeInput = input
}
} catch {
print("Error setting device video input: \(error)")
return false
}
// Setup Microphone
let microphone = AVCaptureDevice.default(for: AVMediaType.audio)!
do {
let micInput = try AVCaptureDeviceInput(device: microphone)
if captureSession.canAddInput(micInput) {
captureSession.addInput(micInput)
}
} catch {
print("Error setting device audio input: \(error)")
return false
}
// Movie output
if captureSession.canAddOutput(movieOutput) {
captureSession.addOutput(movieOutput)
}
return true
}
func startSession() {
if !captureSession.isRunning {
videoQueue().async {
self.captureSession.startRunning()
}
}
}
func stopSession() {
if captureSession.isRunning {
videoQueue().async {
self.captureSession.stopRunning()
}
}
}
func videoQueue() -> DispatchQueue {
return DispatchQueue.main
}
func currentVideoOrientation() -> AVCaptureVideoOrientation {
var orientation: AVCaptureVideoOrientation
switch UIDevice.current.orientation {
case .portrait:
orientation = AVCaptureVideoOrientation.portrait
case .landscapeRight:
orientation = AVCaptureVideoOrientation.landscapeLeft
case .portraitUpsideDown:
orientation = AVCaptureVideoOrientation.portraitUpsideDown
default:
orientation = AVCaptureVideoOrientation.landscapeRight
}
return orientation
}
func startRecording() {
if movieOutput.isRecording == false {
save.setTitle("stop", for: UIControl.State.normal)
let connection = movieOutput.connection(with: AVMediaType.video)
if (connection?.isVideoOrientationSupported)! {
connection?.videoOrientation = currentVideoOrientation()
}
if (connection?.isVideoStabilizationSupported)! {
connection?.preferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.auto
}
let device = activeInput.device
if (device.isSmoothAutoFocusSupported) {
do {
try device.lockForConfiguration()
device.isSmoothAutoFocusEnabled = false
device.unlockForConfiguration()
} catch {
print("Error setting configuration: \(error)")
}
}
//EDIT2: And I forgot this
outputURL = tempURL()
movieOutput.startRecording(to: outputURL, recordingDelegate: self)
}
else {
stopRecording()
}
}
func tempURL() -> URL? {
let directory = NSTemporaryDirectory() as NSString
let path = directory.appendingPathComponent(NSUUID().uuidString + ".mp4")
path22 = path
let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true)
let fileURL: URL = folderPath.appendingPathComponent(path)
return URL(fileURLWithPath: path)
}
函数停止录制(){
if movieOutput.isRecording == true {
movieOutput.stopRecording()
}
}
这里保存到核心数据
let managedObject = self.managedObjectContext
entity = NSEntityDescription.entity(forEntityName: "MediaData", in: managedObject!)
let personMO = NSManagedObject(entity: entity, insertInto: managedObject)
personMO.setValue("\(self.videoURL!)", forKey: "videosS")
personMO.setValue(dataImage, forKey: "thumbnails")
print(personMO)
do
{
try managedObject?.save()
print("video saved")
}
catch
{
print("Catch Erroe : Failed To
}
让appdel=UIApplication.shared.delegate!appdel.avplayer=AVPlayer打印(视频URL!)让playerLayer=AVPlayerLayer(玩家:appdel.avplayer)playerLayer.frame=self.view.boundsself.view.layer.add子层(playerLayer)appdel.avplayer?.play()
决不能将完整文件路径保存到CoreData或其他任何位置。文件路径不是持久的。你的应用程序已沙盒。沙箱路径可以随时更改,特别是在启动和安装之间。
相反,保存文件名,并在每次需要时重建路径。正如您正在调用FileManager.default.urls(for:. docentDirectory...)
来构造文件路径一样,因此您必须在每次要访问该文件时调用它。
如何继续播放视频时,我们按下主页按钮和应用程序转到后台?那时,我们仍然可以听音频并在另一个应用程序上工作。我们应该添加服务来控制视频播放吗?
在我的应用程序中,我想显示来自服务器URI路径的视频,在这里,第一次播放视频,当我想第二次播放视频时,视频没有播放,并显示一个弹出窗口,如无法播放此视频 下面是我的错误 提前谢谢。
问题内容: 我遵循了一些有关结合JavaFX与Swing(JFrame)来播放视频的教程,但是我得到的只是一个黑屏,该视频应该没有任何实际的内容播放,也没有报错。 我在这里做错什么,为什么不播放视频? 我尝试了几个.flv视频,但都不会开始播放(当我在浏览器中打开它们时,它们会播放) 我在装有K-lite完整编解码器包的Windows 8.1 N Pro上运行jre7和jdk1.7.0_45 编辑
我使用下载管理器将文件下载到外部存储器。我使用设置下载文件夹的目标 成功后,我用 这给了我这个 现在我试着用intent播放这个视频文件 这里的内容Uri是 但当我使用action\u share intent时,它也不会被其他应用程序识别。 此外,必须删除包含file://的文件uri,并将其替换为/storage/emulated/0/Download/dishapatani\u Jan 07
问题内容: 我正在使用Flask提供.m3u8和.ts文件来模拟vod流。 视频播放器不会流式传输文件并显示错误(请参见下面的屏幕截图)。我找不到它是什么错误的日志。 我缺少某处的日志消息吗?是什么原因造成的,我该如何解决? 问题答案: 默认情况下,开发服务器以单线程模式运行,这意味着它一次只能处理一个请求。你一次请求两个文件流,.m3u8和.ts。你可以传递或以允许一次处理多个请求,但是,用它自