2011-05-05 91 views
1

我有一個要求,在第一個視頻完成後立即播放第二個視頻。我已經實現了這個功能,但是我看到的問題是視頻轉換之間出現黑屏。我在Galaxy S設備上嘗試這種方法(1 GHZ處理器,512 MB RAM)。逐個播放視頻問題:Android SDK

我已經使用VideoView,SurfaceView,但仍然沒有解決問題。看起來準備視頻需要時間。我使用了推薦的視頻格式(大約500比特率的H264編碼視頻)。考慮到Galaxy S 1 GHZ處理器,這個問題不應該發生。

任何相關的指針將不勝感激。

謝謝! Nilesh製作

下面是代碼:

這裏是代碼。我有兩個視頻:video1和video2。先玩後,我加載Video2。這裏我使用的是videoview

package com.activity; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Color; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.ImageView; 
import android.widget.Toast; 
import android.widget.VideoView; 

public class FirstActivity extends Activity implements OnCompletionListener 
{ 
    /** Called when the activity is first created. */ 
    VideoView video; 
    Toast toast; 
    boolean first; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     overridePendingTransition(0, 0); 
     setContentView(R.layout.main); 
     video = (VideoView) findViewById(R.id.videoView1); 
     Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" 
       + R.raw.video1); 
     video.setOnCompletionListener(this); 
     video.setVideoURI(uri); 
     video.start(); 
     first=true; 
    } 

    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     if(first){ 
      Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" 
        + R.raw.video1); 
      video.setOnCompletionListener(this); 
      video.setVideoURI(uri); 
      video.start(); 
      first=false; 
     } 
     else{ 
      Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" 
        + R.raw.video2); 
      video.setOnCompletionListener(this); 
      video.setVideoURI(uri); 
      video.start(); 
      first=true; 
     } 
    } 

    public boolean onTouchEvent(MotionEvent event) { 
     // TODO Auto-generated method stub 
     ImageView image = new ImageView(this); 
     image.setBackgroundColor(Color.WHITE); 
     image.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.FILL_PARENT)); 
     toast = new Toast(getApplicationContext()); 
     toast.setView(image); 
     toast.setDuration(Toast.LENGTH_LONG); 
     toast.show(); 
     Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
     startActivity(intent); 
     return true; 
    } 
} 
+0

你能張貼您使用的代碼?這可能會給我們提示問題是什麼。 – 2011-05-05 06:59:22

+0

嗨,我發佈了代碼。 – Nilesh 2011-05-05 07:14:10

+0

第一個和第二個視頻之間的延遲時間有多長? – 2011-05-05 07:25:43

回答

1

是否有什麼理由不能在編輯器中將兩個視頻拼接成一個視頻?他們必須是單獨的文件嗎?

另外,你有沒有嘗試過使用多個VideoViews?現在,當video1完成時,您告訴您的VideoView從可能需要一些時間的資源加載video2。如果在活動中有兩個VideoView(一個用於video1,另一個用於video2),並在onCreate期間加載它們,則可以隱藏當前未播放的視頻。在'onCompletion'中,不是加載video2,而是隻隱藏VideoView的video1並使VideoView for video2可見並開始播放。

像這樣(未測試):

public class FirstActivity extends Activity implements OnCompletionListener 
{ 
    /** Called when the activity is first created. */ 
    VideoView video1; 
    VideoView video2; 
    Toast toast; 
    boolean first; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     overridePendingTransition(0, 0); 
     setContentView(R.layout.main); 

     video2 = (VideoView) findViewById(R.id.videoView1); 
     Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" 
       + R.raw.video2); 
     video2.setOnCompletionListener(this); 
     video2.setVideoURI(uri); 
     video2.setVisibility(HIDDEN);   

     video1 = (VideoView) findViewById(R.id.videoView1); 
     Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" 
       + R.raw.video1); 
     video1.setOnCompletionListener(this); 
     video1.setVideoURI(uri); 
     video1.start(); 

     first=true; 
    } 

    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     if(first){ 
      video2.setVisibility(HIDDEN); 
      video1.setVisibility(VISIBLE); 
      video1.start(); 
      first=false; 
     } 
     else{ 
      video1.setVisibility(HIDDEN); 
      video2.setVisibility(VISIBLE); 
      video2.start(); 
      first=true; 
     } 
    } 
} 
+0

我試過這個,即使用兩個視頻視圖。它不適合我。我無法使用合併視頻的方法,因爲我的應用程序可能包含超過15個視頻和應用程序可擴展性的角度,我希望單獨的視頻。 – Nilesh 2011-05-06 06:34:58

+0

嗨尼萊什你是否實現了黑屏問題的解決方案?你有解決方案嗎? – newBie 2013-09-21 04:56:01