メディア レコーダーを使用してビデオを録画していますsurfaceview
。録画していますが、表示角度が 90 度ずれています。実際の部屋の録画とは異なります。つまり、アプリで部屋を録画している場合、表示が 90 度ずれます。部屋の天井は左側にあるので、あなたの部屋のディスプレイになります。これを解決して直角ビデオで記録するのを手伝ってくれる人がいます。参照用のコードは次のとおりです。ここで私のコーディングを確認してください
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<SurfaceView
android:id="@+id/videoview"
android:layout_height="480px" android:layout_width="248dp"/>
<Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="REC"
android:textSize="12dp"/>
</RelativeLayout>`
`
ここに私のマニフェストファイルがあります
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SurfaceAngleRecActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>`
`そしてここに私のコードがあります:
SurfaceAngleRecActivity.java
public class SurfaceAngleRecActivity extends Activity implements SurfaceHolder.Callback
{
MediaRecorder mediaRecorder;
SurfaceHolder surfaceHolder;
boolean recording;
Button record;
MediaPlayer mediaPlayer;
boolean pausing = false;
String PlayPath ="/sdcard/myvideo.mp4";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mediaRecorder = new MediaRecorder();
initMediaRecorder();
setContentView(R.layout.main);
recording = false;
SurfaceView myVideoView = (SurfaceView)findViewById(R.id.videoview);
surfaceHolder = myVideoView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
record=(Button)findViewById(R.id.mybutton);
record.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(!recording)
{
mediaRecorder.start();
recording = true;
//Stop.setVisibility(View.VISIBLE);
//Record.setVisibility(View.INVISIBLE);
record.setText("STOP");
//Play.setEnabled(false);
//Pause.setEnabled(false);
}else
{
mediaRecorder.stop();
mediaRecorder.release();
recording = false;
//Record.setVisibility(View.VISIBLE);
//Stop.setVisibility(View.INVISIBLE);
//Record.setText("Record");
//Play.setEnabled(true);
//Pause.setEnabled(true);
// finish();
}
}
});
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
prepareMediaRecorder();
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
private void initMediaRecorder()
{
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
//File file=new File(Environment.getExternalStorageDirectory(), PlayPath);
CamcorderProfile camcorderProfile_HQ =CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mediaRecorder.setProfile(camcorderProfile_HQ);
mediaRecorder.setOutputFile("/sdcard/myvideo.mp4");
//mediaRecorder.setVideoSize(20, 20);
//mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
//mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M
}
private void prepareMediaRecorder()
{
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
try
{
mediaRecorder.prepare();
//mediaRecorder.setVideoSize(150, 200);
}
catch (IllegalStateException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}`