2014-09-09 1 views
1

PhoneGap Build를 사용하여 iOS v7.1 + 응용 프로그램을 빌드하고 weinre을 사용하여 디버깅합니다. 나는 media-capture plugin과 file API를 사용하여 비디오를 포착하고 base64 표현을 시도한다. 비디오 레코더를 열어 비디오를 가져 와서 파일 경로를 반환 할 수 있습니다. 그런 다음 readAsDataURL()에 필요한 파일 객체를 얻으려면 resolveLocalFileSystemURL()을 사용합니다. 문제는 FileReader이며 결코 onloadend 콜백으로 전화하지 않습니다.PhoneGap FileReader/readAsDataURL 콜백을 트리거하지 않음

나는 하루 종일 주위를 파고 들었다. console.log()은 어디에서나 생각할 수 있습니다. iOS 버전 is supported을 확인했습니다. 모든 변수는 콜백이 단순히 호출되지 않는다고 기대하는 바입니다. 나는 또한 모든 다른 콜백을 설정하려고했지만 어느 누구도 콜백을받지 못했다. 나는 readAsText()readAsDataURL()을 대체하려고 노력했다. 그러나 나는 여전히 bupkis를 얻는다. 나는 비동기 호출이 조금 걸릴지도 모른다고 생각했기 때문에 최대 5 분을 기다려 보았습니다.

아래 코드는 제 코드입니다. 아래 콘솔 출력입니다.

var elements = new Object(); 
elements["video"] = $("#window_incident_create > .video > source")[0]; 

navigator.device.capture.captureVideo(
    function(files) { 
     for (var i in files) { 
      var file = files[i]; 

      var name = file.name; 
      var path = file.fullPath; 
      if (path.indexOf("/private") === 0) 
       path = "file://" + path.substr(8); 
      else 
       path = "file://" + path; 
      var type = file.type; 
      var lastModifiedDate = file.lastModifiedDate; 
      var size = file.size; 

      var reader = new FileReader(); 
      reader.onloadend = function(event) { 
       console.log(3); 
       elements["video"].type = type; 
       elements["video"].src = "data:" + type + ";base64," + event.target.result; 
       console.log(4); 
      }; 

      window.resolveLocalFileSystemURL(
       path, 
       function(entry) { 
        console.log(1, entry.nativeURL); 
        reader.readAsDataURL(entry); 
        console.log(2); 
       }, 
       function(error) { 
        console.log("0-0", error); 
       } 
      ); 
     } 
    }, 
    function(error) { 
     console.log("0-1", error); 
    }, 
    { 
     limit: 1 
    } 
); 

1 "파일 : ///var/mobile/Applications/AB239984-FB9F-43C0-B699-3596AC8A43A8/tmp/capture/capturedvideo.MOV"

2

+0

혹시이 알아낼 했습니까? – Justin

답변

1

코드를 약간 재구성하십시오. resolveLocalFileSystemURL 성공 콜백 내에 reader 초기화 및 onloadend 콜백을 넣습니다. 이 같은

뭔가 :

var elements = new Object(); 
elements["video"] = $("#window_incident_create > .video > source")[0]; 

navigator.device.capture.captureVideo(
    function(files) { 
     for (var i in files) { 
      var file = files[i]; 

      var name = file.name; 
      var path = file.fullPath; 
      if (path.indexOf("/private") === 0) 
       path = "file://" + path.substr(8); 
      else 
       path = "file://" + path; 
      var type = file.type; 
      var lastModifiedDate = file.lastModifiedDate; 
      var size = file.size; 

      window.resolveLocalFileSystemURL(
       path, 
       function(entry) { 
        console.log(1, entry.nativeURL); 
        var reader = new FileReader(); 
        reader.onloadend = function(event) { 
         console.log(3); 
         elements["video"].type = type; 
         elements["video"].src = "data:" + type + ";base64," + event.target.result; 
         console.log(4); 
        }; 
        reader.readAsDataURL(entry); 
        console.log(2); 
       }, 
       function(error) { 
        console.log("0-0", error); 
       } 
      ); 
     } 
    }, 
    function(error) { 
     console.log("0-1", error); 
    }, 
    { 
     limit: 1 
    } 
);