首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用swift中的GCDWebServer在web浏览器上获取视频

无法使用swift中的GCDWebServer在web浏览器上获取视频
EN

Stack Overflow用户
提问于 2019-05-21 22:36:13
回答 2查看 560关注 0票数 7

我创建了一个小的演示应用程序,该应用程序使用UIImagePickerController访问来自iPhone的图像和视频。当我选择任何图像或视频时,app会在文档目录中创建它的副本(图像或视频)。并使用GCDWebserver在iPhone上创建web服务器,并需要公开所选的图像或视频。但它不起作用。

以下是示例代码,不确定我可能错在哪里。

代码语言:javascript
复制
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var btnselect: UIButton!
let videoPicker = UIImagePickerController()

@IBAction func btnSelect(_ sender: Any) {

        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
            let myPickerController = UIImagePickerController()
            myPickerController.delegate = self;
            myPickerController.sourceType = .photoLibrary
            myPickerController.allowsEditing = false
            self.present(myPickerController, animated: true, completion: nil)
        }

    }

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.dismiss(animated: true, completion: nil)
    }

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    // 1. saving video to documents directory

      let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as! NSURL
            let videoData = NSData(contentsOf: videoURL as URL)
            let path = try! FileManager.default.url(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil, create: false)

            let newPath = path.appendingPathComponent("/myTestVideo.mp4")
            do {
                try videoData?.write(to: newPath)
            } catch {
                print(error)
            }


 // 2. Create web server on iPhone using GCDWebServer

        let webServer = GCDWebServer()
        webServer.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self, processBlock: {request in
        return GCDWebServerDataResponse(newPath)

       })
       webServer.start(withPort: 8080, bonjourName: "GCD Web Server")

}
}

我需要这个选定的(图像或视频)是由这个GCD Web服务器托管/访问。

EN

回答 2

Stack Overflow用户

发布于 2019-12-06 03:03:07

您可以使用GCDWebServerDataResponse将文件作为响应传递,如下所示:

代码语言:javascript
复制
webServer!.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self, processBlock: {request in
    let path = Bundle.main.path(forResource: "sample", ofType: "mp4")
    let handler = FileHandle.init(forReadingAtPath: path!)
    return GCDWebServerDataResponse(data: (handler?.readDataToEndOfFile())!, contentType: "video/mp4")  
})

请注意,当您需要提供文件的内容类型和数据时。

票数 1
EN

Stack Overflow用户

发布于 2019-05-29 15:52:05

假设它可能是根据错误的路径

let newPath = path.appendingPathComponent("/myTestVideo.mp4")

生成..../Documents//myTestVideo.mp4

尝试从追加路径组件中删除反斜杠。

let newPath = path.appendingPathComponent("myTestVideo.mp4")

此外,这个问题与"file://“前缀”有关的可能性也很小。如果之前的建议无济于事,请尝试删除前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56240669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档