2

は、私はギャラリーからビデオを選択するか、またはビデオをキャプチャするとき、私はURLを設定ビデオプレーヤーからサムネイル画像を取得しようとしているので、コントローラでは、この私のコードは: -、アンドロイドの動画からサムネイルを撮る方法は?

var intent = Titanium.Android.createIntent({ 
    action: Ti.Android.ACTION_PICK, 
    type : "video/*" 
}); 
intent.addCategory(Ti.Android.CATEGORY_DEFAULT); 
var curActivity = $.createPost.getActivity(); 

curActivity.startActivityForResult(intent, function(event) { 
    if (event.resultCode == Ti.Android.RESULT_OK) { 
     if (event.intent.data != null) { 
      // If everything went OK, save a reference to the video URI 
      Ti.API.info('here '+ event.intent.data); 
      Ti.API.info('video: '+ event.intent); 
      var videoPath = event.intent.data; 
      video = Ti.Filesystem.getFile(videoPath); 

      $[e.source.fileView].setUrl(event.intent.data); 
      // $[e.source.fileView].setMedia(file); 
      $[e.source.fileView].setVisible(true); 
      $[e.source.removeBtn].setVisible(true); 

      $.video.requestThumbnailImagesAtTimes([0,1,2,6,12], Titanium.Media.VIDEO_TIME_OPTION_NEAREST_KEYFRAME, function (response) { 
       alert('text'); 
       Ti.API.info("Thumbnail callback called, success = " + response.success); 
       Ti.API.info("Thumbnail callback called, time = " + response.time); 
       Ti.API.info("Thumbnail callback called, code = " + response.code); 
       if(response.success) { 
        videoThumb = response.image; 
       } 
      }); 
     } 
     else { 
      Ti.API.error('Could not retrieve media URL!'); 
     } 
    } 
    else if (event.resultCode == Ti.Android.RESULT_CANCELED) { 
     Ti.API.trace('User cancelled video capture session.'); 
    } 
    else { 
     Ti.API.error('Could not record video!'); 
    } 
}); 

私が取得しますビデオ($ .video)に表示されますが、サムネイルを取得できません。 このコードは

  $.video.requestThumbnailImagesAtTimes([0,1,2,6,12], Titanium.Media.VIDEO_TIME_OPTION_NEAREST_KEYFRAME, function (response) { 
       alert('text'); 
       Ti.API.info("Thumbnail callback called, success = " + response.success); 
       Ti.API.info("Thumbnail callback called, time = " + response.time); 
       Ti.API.info("Thumbnail callback called, code = " + response.code); 
       if(response.success) { 
        videoThumb = response.image; 
       } 
      }); 

ではなく、アンドロイドにIOS

でうまく動作します。

+0

私は今同じ状況にあります。 6.0.X SDKで試してみると、Android用の運がない。 –

答えて

2

現時点ではこれはできません。壊れているようです。問題のJiraチケットは次のとおりです。 Android: Get image frames at times out of local video

これは6.1.0で修正されたことを示しています。どうやらリモートビデオでこれを行うことができます。したがって、それがあなたのワークフローに合っていれば、それを達成できるかもしれません。

これはあなたの質問にお答えしますか?

+0

PRのhttps://github.com/appcelerator/titanium_mobile/pull/8830 –

+0

返信いただき、ありがとうございました –

+0

それは私のためにリモートまたは新しいSDKで動作しませんでした。私の解決策は、[ffmpeg Android Titanium module](https://github.com/badoque/titanium-ffmpeg-android-wrapper)を使用して、サムネイルを生成するコマンドで実行することでした。ここにコマンドがありますが、Tiの方法で実行する必要があります。 '' ffmpeg -i input.flv -ss 00:00:14.435 -vframes 1 out.png' –

関連する問題