2016-04-28 9 views
0

私はアプリケーションを開発しました.1つの機能は、サーバーからダウンロードしたビデオを見ることです。私はこの方法でそれを果たしたビデオのためのNSURLを得たiPadやiPhoneでダウンロードして再生したビデオでまれな問題

func GetVideoFiedMedia(videoFiedData: VideofiedVideo?, completionHandler: (NSURL?, NSError?) ->()) { 
    var result: NSURL? = nil; 
    let parameters : [ String : AnyObject] = [ 
     "CnxID": (videoFiedData?.cnxID!)!, 
     "TaskNum": (videoFiedData?.taskNum!)!, 
     "Ev_File": (videoFiedData?.evFile!)! 
    ] 
    let headers = [ 
     "Content-Type": "application/json" 
    ] 
    let urlAux = "https://xxxxxx/xxxxx/xxxxx.svc/VideoMedia?"; 
    Alamofire.request(.POST, urlAux, parameters: parameters, headers: headers, encoding: .JSON) 
     .validate() 
     .responseString { response in 
      switch response.result { 
      case .Success: 
       if let JSON = response.result.value { 
        do{ 
         let data: NSData = JSON.dataUsingEncoding(NSUTF8StringEncoding)! 
         let decodedJson = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves) as! NSDictionary 
         let dObj = decodedJson["d"] as! NSDictionary; 
         let resultSet = dObj["Media"] as? NSArray; 
         if(resultSet != nil){ 
          let stringsData = NSMutableData(); 
          for item in resultSet! { 
           let byte = item as! Int; 
           var char = UnicodeScalar(byte); 
           stringsData.appendBytes(&char, length: 1) 
          } 
          var destinationUrl: NSURL? = nil; 
          let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! as NSURL; 
          let fileName = "msavid.mp4"; 
          destinationUrl = documentsUrl.URLByAppendingPathComponent(fileName) 
          let fileMangr = NSFileManager.defaultManager() 
          var fileHandle = NSFileHandle.init(forWritingAtPath: (destinationUrl?.path!)!) 
          if(fileHandle == nil){ 
           fileMangr.createFileAtPath((destinationUrl?.path!)!, contents: stringsData, attributes: nil) 
           fileHandle = NSFileHandle.init(forWritingAtPath: (destinationUrl?.path!)!) 
          } 
          if(fileHandle != nil){ 
           fileHandle?.seekToEndOfFile(); 
           fileHandle?.writeData(stringsData); 
           fileHandle?.closeFile(); 
          } 
          result = destinationUrl; 
          completionHandler(result, nil); 
         } 

        }catch{ 
         result = nil; 
         completionHandler(result, nil); 
        } 
       } 
      case .Failure(let error): 
       completionHandler(result, error); 
      } 
    } 
} 

::私はネットワークにアクセスするAlamofireを使用しています、これは私のコードです

_ = self.manager.GetVideoFiedMedia(videoFiedItem, completionHandler: { responseObject, error in 
        if(responseObject != nil){ 
         var sendSegue = false; 
         self.nsurl = responseObject; 
         if NSFileManager().fileExistsAtPath(responseObject!.path!) == true { 
          if(sendSegue == false){ 
           self.performSegueWithIdentifier("sureViewSegue", sender: nil); 
           self.nsurl = nil; 
           sendSegue = true; 
           MBProgressHUD.hideAllHUDsForView(self.view, animated: true); 
          } 
         }else{ 
          MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
          let alert = UIAlertController(title: "Alert", message: "We have problem to download the media data, please try again later.", preferredStyle: UIAlertControllerStyle.Alert); 
          alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)); 
          self.presentViewController(alert, animated: true, completion: nil); 
         } 
        }else{ 
         MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
         let alert = UIAlertController(title: "Alert", message: "We have problem to download the media data, please try again later.", preferredStyle: UIAlertControllerStyle.Alert); 
         alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)); 
         self.presentViewController(alert, animated: true, completion: nil); 
        } 
       }) 

私はプッシュを行っセグエAVPlayerViewController。

iOSシミュレータを使用してメソッドをテストしていたときに、実際のデバイス(iPhoneまたはiPad)に機能を使用しようとしたときに問題が発生したため、ビデオが表示されませんでした。ビデオを再生できないこのシンボルのAVPlayerViewController。

私はこの問題の原因を突き止めることはできません。

答えて

0

シンプルでありながら同時に考えられないことですが、デバイスをリセットして、ファイルmsavid.mp4のコピーを電話機で消去するだけで動作しています。

関連する問題