JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java ME、Google Android 平台與 JavaCard 討論區 » Android  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 使用Webcam實做錄影程式
elysium5290





發文: 1
積分: 0
於 2014-11-24 21:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請教一下

因為小弟現在在Pandaboard上實作Android程式

版本是Android4.0.3

由於需要錄影功能,因此使用的是USB Webcam

在starpreview() 都還一切正常

一按下Button開始執行錄影就當掉

因為在Pandaboard上面 所以小弟也不知道要如何看logcat

但是至少這隻程式在Samsung S3上面是可以正常運行的

請問對於程式Crash掉的問題,各位大大有甚麼看法嗎?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.media.MediaRecorder;
import android.media.MediaRecorder.VideoSource;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
 
public class MainActivity extends Activity implements SurfaceHolder.Callback {
  private Button start;// 開始錄製按鈕
  private Button stop;// 停止錄製按鈕
  private MediaRecorder mediarecorder;// 錄製視頻的類
  private SurfaceView surfaceview;// 顯示視頻的控制項
  Camera camera;
  private SurfaceHolder surfaceHolder;
 
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉標題列
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);// 設置全屏
    // 設置橫屏顯示
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    // 選擇支援半透明模式,在有surfaceview的activity中使用。
    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    setContentView(R.layout.activity_main);
    init();
  }
 
  private void init() {
    start = (Button) this.findViewById(R.id.start);
    stop = (Button) this.findViewById(R.id.stop);
    start.setOnClickListener(new TestVideoListener());
    stop.setOnClickListener(new TestVideoListener());
    surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);
    SurfaceHolder holder = surfaceview.getHolder();// 取得holder
    holder.addCallback(this); // holder加入回檔介面
    // setType必須設置,要不出錯.
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  }
  
  
    private void refreshGallery(File file) 
    {
    Intent mediaScanIntent = new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    mediaScanIntent.setData(Uri.fromFile(file));
    sendBroadcast(mediaScanIntent);
  }
    
  class TestVideoListener implements OnClickListener {
 
    @Override
    public void onClick(View v) {
      if (v == start) {
 
        // 創建media recorder物件
        mediarecorder = new MediaRecorder();
        // 設置錄製視頻源為Camera(相機)
        mediarecorder.setCamera(camera);
        mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        // 設置錄製完成後視頻的封裝格式THREE_GPP為3gp.MPEG_4為mp4
        mediarecorder
            .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        // 設置錄製的視頻編碼h263 h264
        mediarecorder
            .setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        // 設置視頻錄製的解析度。必須放在設置編碼和格式的後面,否則報錯
        mediarecorder.setVideoSize(1280, 720);
        // 設置錄製的視頻幀率。必須放在設置編碼和格式的後面,否則報錯
        mediarecorder.setVideoFrameRate(5);
        mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
        // 設置視頻檔輸出的路徑
        String dir = Environment.getExternalStorageDirectory().toString() + "/camtest/";  
        String path = dir + System.currentTimeMillis() + ".3gp";
        mediarecorder.setOutputFile(path);
        
        try {
          // 準備錄製
          mediarecorder.prepare();
          // 開始錄製
 
        } catch (IllegalStateException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        mediarecorder.start();
        //camera.takePicture(null, null, jpeg);
        
      }
      if (v == stop) {
        camera.setPreviewCallback(null);
        camera.stopPreview();
          camera.release();
        if (mediarecorder != null) {
          // 停止錄製
          mediarecorder.stop();
          mediarecorder.reset();
          // 釋放資源
          mediarecorder.release();
          mediarecorder = null;
          
        }
      }
 
    }
 
  }
 
  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width,
      int height) {
    // 將holder,這個holder為開始在oncreat裡面取得的holder,將它賦給surfaceHolder
    surfaceHolder = holder;
  }
 
  @Override
  public void surfaceCreated(SurfaceHolder holder) {
    // 將holder,這個holder為開始在oncreat裡面取得的holder,將它賦給surfaceHolder
    surfaceHolder = holder;
    camera=Camera.open();
      try 
      {
        Camera.Parameters parameters=camera.getParameters();
        //parameters.setPictureFormat(PixelFormat.JPEG);
        parameters.setPreviewSize(320,240);
        parameters.setPictureSize(320, 240);
        camera.setParameters(parameters);
        camera.setPreviewDisplay(surfaceHolder);
        camera.startPreview();
        
      
      } 
      catch (IOException e) 
      {
        Log.i("ok","1");
      }
  }
 
  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
    // surfaceDestroyed的時候同時物件設置為null
    surfaceview = null;
    surfaceHolder = null;
    mediarecorder = null;
    
  }
}


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
950 使用Webcam實做錄影程式 elysium5290 5558 2014-11-24 21:53
» JWorld@TW »  Java ME、Google Android 平台與 JavaCard 討論區 » Android

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8