2
私はBlackBerry用に開発しており、ビデオカメラアプリを起動するだけではなく、ビデオを録画しようとしています。BlackBerry Recording Video 0KBのファイルを保存します。
私はPlayer
オブジェクトを作成し、カメラが見ることができるものを表示する画面上のフィールドを作成することができます。私は録音して正常に動作しますが、RecordControl
でcommit()
と呼ぶと、0KBのSDカードにファイルが書き込まれます。私は今これで頭を悩ましてきましたが、この問題を解決することはできません。ここで&を開始コードが記録を終了する:
private void displayVideoRecorder()
{
initVideoRecorder();
if (mTimeLeft == null)
{
mTimeLeft = UIFactory.createLabel("Time left: " + (mMaxVideoDuration - mCurrVideoDuration));
}
// Create a stop recording button and a listener for the saving video functionality
if (mStopRecording == null)
{
mStopRecording = UIFactory.createButtonField("Begin recording");
mStopRecording.setChangeListener(new FieldChangeListener()
{
public void fieldChanged(Field field, int context)
{
if (mRecordingVideo)
{
// Stop the messages
if (mHandlerID != -1)
{
UiApplication.getUiApplication().cancelInvokeLater(mHandlerID);
mHandlerID = -1;
}
new Runnable()
{
public void run()
{
// Save the video
stopRecordingVideo();
// Reset the flag
mRecordingVideo = false;
}
}.run();
// Return to the main page
displayFirstPage();
}
else
{
// Start recording
new Runnable()
{
public void run()
{
mRecordControl.startRecord();
mRecordingVideo = true;
// Queue a message for however long the maximum time for a video is
mHandlerID = UiApplication.getUiApplication().invokeLater(mHandler, 1000, true);
}
}.run();
// Set a flag and change the text of the button
mStopRecording.setLabel("Stop recording");
}
}
});
}
mCurrVideoDuration = 0;
mStopRecording.setLabel("Begin recording");
mTimeLeft.setText("Time left: " + (mMaxVideoDuration - mCurrVideoDuration));
// Add the video & a button to go back
getContentArea().deleteAll();
getContentArea().add(mVideoField);
getContentArea().add(mTimeLeft);
getContentArea().add(mStopRecording);
try
{
// Show what the camera can see
mPlayer.start();
}
catch (Exception e)
{
Out.p("Failed to begin video player");
Out.printStackTrace(e);
}
}
/**
* Stops recording the video and saves the file to the file system. If a video is not recording this call is ignored
*/
private void stopRecordingVideo()
{
if (mRecordingVideo)
{
try
{
mRecordingVideo = false;
// Stop recording and save the file name
mRecordControl.stopRecord();
mPlayer.stop();
mRecordControl.commit();
}
catch (Exception e)
{
Out.alert(e.toString());
}
}
}
private void initVideoRecorder()
{
try
{
Out.p("Beginning initialise of recorder");
mPlayer = Manager.createPlayer("capture://video?" + getEncodings()[0]);// "capture://video?encoding=video/3gpp");
mPlayer.addPlayerListener(new PlayerListener()
{
public void playerUpdate(Player player, String event, Object eventData)
{
Out.p("Player " + player.hashCode() + " got event " + event + ": " + eventData);
}
});
mPlayer.realize();
mVideoControl = (VideoControl) mPlayer.getControl("VideoControl");
mRecordControl = (RecordControl) mPlayer.getControl("RecordControl");
Out.p("Record Control: " + mRecordControl);
// Set where the video will record to
mRecordControl.setRecordLocation(mFilePath);
mVideoField = (Field) mVideoControl.initDisplayMode(GUIControl.USE_GUI_PRIMITIVE, "net.rim.device.api.ui.Field");
// add(mVideoField);
Out.p("Video Field: " + mVideoField);
}
catch (Exception e)
{
Out.alert(e.toString());
Out.p("Failed to start recording");
displayFirstPage();
}
}
私はもともとそれが実際の映像を保存するために取得することができないの後で何success.Anyヘルプは高く評価されていないと、多くのガイドに従ってきました。ありがとう。