2011-08-28 2 views
20

ButtonClick에 MP4 비디오 파일을 성공적으로 표시하는 앱을 제작 중입니다. 단추를 클릭하면 비디오 재생을 지연시키지 않도록 미리 버퍼링하거나 비디오 URI (원격 URL)를 미리로드하려고합니다. 클릭하여 바로 재생하기를 원하므로 앱 시작 스플래시 화면에서 사전로드 또는 버퍼링이 적절한 해결책으로 보입니다. 단 한가지는 어떻게해야할지 모르겠다. Android 책이 많지만 버퍼링이 전혀 없거나 오디오 만 다루고있는 책은 거의 없습니다.사전로드 또는 사전 버퍼 .mp4 비디오가 안드로이드 앱 개발에 있습니다.

누구든지 이전 활동에서 비디오를 버퍼하는 방법을 알려 줄 수 있습니까?

감사합니다.

+1

동영상의 일부만 버퍼링 하시겠습니까? 그렇지 않으면 플래시 메모리에 MP4를 다운로드 한 다음 파일처럼 재생할 수 있습니다. – braden

+0

잘 모르겠지만 시작 전화를 한 다음 즉시 일시 중지 또는 통화를 시도 했습니까? –

+0

혹시 해결책을 찾았습니까? –

답변

0

기본 Android 브라우저는 미디어 파일 (오디오 또는 비디오)을 버퍼링하지 않으므로 HTML5에서 수행 할 방법이 없습니다. @ bradenV2에 따르면, 파일을 메모리에 복사 할 수 있습니다 (App 인 경우 Phonegap을 사용할 수 있음).

2

는이 같은 비디오를 준비하기위한 MediaPlayer를 사용할 수 있습니다 :

mediaPlayer = new MediaPlayer(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.setOnPreparedListener(<implementation of MediaPlayer.OnPreparedListener>); 

mediaPlayer.setDataSource(dataSource); 
mediaPlayer.prepareAsync(); 

를 호출 prepareAsync() 동영상을 버퍼링 할 MediaPlayer를 후. MediaPlayer.OnPreparedListener.onPrepared()은 미디어 플레이어가 아직 재생 준비가되었는지 알려줍니다. 이 같은 배경에서 버퍼링으로 다른 상태를 지원 http://developer.android.com/guide/topics/media/exoplayer.html

:

그냥 준비된 플래그를 확인하고 당신이 당신의 버튼을 클릭하면 mediaplayer.start() 전화 "onButtonClick"

+0

이 답변을 주셔서 감사합니다. 앞으로 출시 될 비디오를 미리 버퍼링 할 비디오 재생 목록을 만들고 싶습니다. 2 개의 MediaPlayers를 사용해야합니까? 이드는 순간적으로 각 비디오 간의 전환을 좋아합니다. 나는 2 명의 선수를 교대로 생각하고 있었다. 이 방법을 권장 하시겠습니까? – codeshark

+0

당신은 그러한 접근법을 취할 수 있습니다. 또는 비디오 업로드를 위해 미리 다운로드 할 수있는 "Preload Helper"클래스를 만들 수 있습니다. – leegor

+0

비디오 A가 재생 중이고 데이터 소스를 비디오 B로 설정하고 prepareAsync()를 호출하면 mediaPlayer에서 비디오 A를 실행하지 않게됩니까? Preload Helper 클래스에 의해 두 번째 mediaPlayer가 사용됩니까? 또한, 새로운 ExoPlayer android 클래스 사용에 대한 귀하의 생각은 어떻습니까? 감사! – codeshark

3

구글은 미디어 재생을위한 높은 수준을 제공 ExoPlayer을 발표 :

// 1. Instantiate the player. 
player = ExoPlayer.Factory.newInstance(RENDERER_COUNT); 
// 2. Construct renderers. 
MediaCodecVideoTrackRenderer videoRenderer = … 
MediaCodecAudioTrackRenderer audioRenderer = ... 
// 3. Inject the renderers through prepare. 
player.prepare(videoRenderer, audioRenderer); 

나는 내 자신의 프로젝트에서 그것을 사용하고 꽤 효율적으로 보인다. 또한 Google은 플레이어의 전체 데모를 만들었습니다 : https://github.com/google/ExoPlayer/tree/master/demo/src/main/java/com/google/android/exoplayer/demo/full은 간단한 데모보다 강력합니다.

+0

이 답변을 주셔서 감사합니다. 비디오 재생 목록 응용 프로그램을 만들고 싶습니다. 동영상은 IP를 통해 전달됩니다. 이드는 순간적으로 각 비디오 간의 전환을 좋아합니다. 동영상 재생이 끝나기 전에 다가오는 다음 동영상을 미리 버퍼링하는 것이 좋습니다. Exoplayer의 두 인스턴스를 사용해야합니까? 이것이 가능한가? 이 방법을 권장 하시겠습니까? – codeshark

+0

exoplayer가 많은 인스턴스를 지원하는 것은 아닙니다.하지만이를 수행 할 수있는 방법이 있어야합니다. ExoPlayer 사용을 고려해보십시오. github에서 문제를 열 ​​수 있습니다 : https://github.com/google/ExoPlayer –