2012-09-14 5 views
1

VideoView보기를 사용하는 활동에 카메라 피드를 표시하는 데 문제가 있습니다. 나는 단순히 내 카메라를 보려고한다. (나중에 사진을 찍거나 찍기를 희망한다.) 나는 의도를 사용하고 싶지 않고, 실제보기를 50dp X 50dp 상자에 넣고 싶다. 코드가 컴파일되고 50X50 dps 인 블랙 박스가있는 빈 활동이 나타납니다. 유일한 문제는 이제 카메라의 라이브 피드를 표시하고 있다는 것입니다. 이것은 내가 적절한 권한 내 레이아웃 파일에Android VideoView가 표시되지 않습니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.myview" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 

    <uses-permission android:name="android.permission.RECORD_VIDEO"/> 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <uses-permission android:name="android.permission.RECORD_AUDIO"/> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

다음으로는 VideoView를 지켜 보면서을 생성하고 설정을 포함해야했다 내가 가지고있는 코드 ...

매니페스트 파일
입니다 속성 (나는 모든 올바른 속성을 설정 있습니까?)

레이아웃 파일 내 활동 마지막으로

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:custom="http://schemas.android.com/apk/res/com.example.myview" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <VideoView 
     android:id="@+id/vvv" 
     android:layout_width="250dp" 
     android:layout_height="250dp" 
     android:layout_gravity="center"/> 

</LinearLayout> 

...

내 활동 파일

package com.example.myview; 

import java.io.IOException; 

import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.SurfaceTexture; 
import android.hardware.Camera; 
import android.view.*; 
import android.view.TextureView.SurfaceTextureListener; 
import android.widget.VideoView; 

public class MainActivity extends Activity 
{ 

    private MediaRecorder mediarecorder; 
    private VideoView vv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     //Be sure to load the activity view before I try to grab the sub view widets... 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     mediarecorder = new MediaRecorder(); 
     mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
     mediarecorder.setOutputFile("blah.mp4"); 

     vv = (VideoView)findViewById(R.id.vvv); 
     vv.setKeepScreenOn(true); 


     vv.start(); 


     SurfaceHolder holder = vv.getHolder(); 
     mediarecorder.setPreviewDisplay(holder.getSurface()); 


     try 
     { 
      mediarecorder.prepare(); 

     // mediarecorder.start(); 
     } catch (IllegalStateException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


} 

답변

3

VideoView 이미 녹화 된 비디오를 재생할 때만 사용됩니다. Android CameraMediaRecorder API를 사용하여 동영상을 녹화하는 것과는 아무 상관이 없습니다.

카메라에서 미리보기 스트림을 표시하고 기록 비디오 미디어 레코더에 카메라를 연결,이 가이드 시작하려면 : 현재 Building a Camera App

, 당신은 카메라 인스턴스가 없습니다 MediaRecorder에 전달할 필요가 전혀 없습니다. 카메라 미리보기를 표시하기 위해 SurfaceView를 사용해야하고> 3.0을 타겟팅하는 경우 TextureView/GLSurfaceView를 사용해야합니다.

일부 비디오가 녹화되면 VideoView로 재생할 수 있습니다.

+0

위대한 링크에 감사드립니다! – Matthew

+0

내 경험에 따르면 텍스처를 설정 한 후에 setCamera()를 사용하더라도 (ICS 기준) 비디오 녹화를 위해 mediarecorder와 함께 textureview 또는 surfacetexture를 사용할 수는 없습니다. – ThumbsDP

관련 문제