필요한 영상의 스펙은 MAX 시간 45초, MAX 용량 5MB 입니다....
지금 시도해본 것은.... 아래와 같습니다... ㅠ_ㅠ
1. 내장 카메라 호출
intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 45);
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, (long)(1024*1024*53));
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mkdirs().getPath()+"/test_video.mp4");
startActivityForResult(intent, TAKE_CAMERA_VIDEO);
문제점은 MediaStore.EXTRA_VIDEO_QUALITY를 0으로 주나 1로 주나 3메가는 7~8초면 초과해버려서 촬영이 끝나버리네요...
2. MediaRecorder 를 이용하여 직접 캠코더 구현
진저브레드 이상의 버전에서는 CamcorderProfile 이용하여 원하는 시간과 사이즈를 맞춰서 전송하는데 성공 했습니다.
문제점은 분명 래퍼런스에 CamcorderProfile이 프로요 이하버전을 지원하지 않아서 아래와같이 사용하라 하여서 그대로 하였는데
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
카메라가 실행되지 않고 익셉션을 내면서 죽는다는 점과
lanscape로 카메라를 구현하니 새로로 찍어도 항상 가로로 영상이 찍혀서
강제로 세로로 찍은 영상은 썸네일만 세로로 돌려서 동영상 리스트에서 꼭 세로 동영상 인것마냥 보이게끔은 해보았지만
업로드 한 영상을 재생할 경우 가로로 누은채로 세로 영상이 재생되어 fail....
끝으로 직접 구현한 소스인 점을 감안하면 여러 단말에서의 테스트가 필요하고 그에 따른 통증(호환성, 버그, 동작의 일관성 등)에 대한 두려움이 큽니다.... ㅠ_ㅠ
일단 해본것은 위의 두 가지입니다....
그리고 또 문제가 되는것이 앨범에서 첨부 했을 경우... 가령 1GB 짜리 영상을 선택했다면... 분명 저는 용량을 5메가로 맞춰줘야 하는데...
이것을 trim 해주는 api도 모르겠고(이젠 존재 여부마저 의심스럽습니다 아무리 찾아도 안 나오네요....)....
설사 trim이 가능하다 하여도 고해상도의 영상이라면 5메가를 맞추면 5초 가량의 영상밖에 취득하지 못하는 결과가 생길텐데....
그럼 영상을 작은 사이즈로 압축을 해야하는데.... 짧게나마 구글링 해본 결과 mp4나 3gp 는 이미 압축이 된 상태이고
안드로이드는 플랫폼에서 de-compress 나 re-compress를 지원하지 않는다고합니다...
그럼 결국엔 저 (앨범에서 첨부 되었거나 내장카메라로 직접 찍은)고해상도 영상을 인코딩하면서 작은 비디오 클립을
하나 더 생성해야 한다는 건데... 이 또한 무지하여 잘 모르겠네요 ㅠ_ㅠ
글이 길지만.... 간다니 요약하자면....
동영상을 서버로 전송하고 싶습니다.
필요한 조건은 5MB 이하, 45초 이하 이구요
직접 찍어서도 가능하며, 앨범에서 첨부도 가능하게 하고 싶습니다...
관련하여 구현 경험이 있으신분은 작은 힌트라도 주시면 감사하겠습니다 ㅠ_ㅠ
긴글 읽어주셔서 감사합니다!!