我一直工作在用戶觸摸屏幕開始電影中的應用更亮。屏幕圖像是電影的第一幀。一旦觸摸發生,電影就會播放。我通過在電影前面放置第一幀jpg,然後在我認爲電影正在播放時刪除jpg。 (搞清楚當發生這種情況是不可能的,但這是另一個問題,而舊設備上,如果你刪除圖像太早,你黑)的Kindle Fire HD:電影比JPG格式
這個測試可能上六個不同的設備。今天的第七場:Kindle Fire HD。在這個設備上,電影比相應的jpg更亮。在所有其他設備上,它們完美匹配。任何想法可能會導致這種情況或如何解決?
(與HD另一個問題是,電影需要很長的時間來開始播放但這是另外一個問題。)
編輯:這裏是我的main.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<VideoView
android:id="@+id/vv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</FrameLayout>
這裏是代碼:
public class VideoTestActivity extends Activity implements SurfaceHolder.Callback, OnPreparedListener, OnCompletionListener {
private VideoView vv;
private ImageView iv;
private Bitmap b;
private MediaPlayer mp = new MediaPlayer();
private static final String TAG = VideoTestActivity.class.getSimpleName();
private volatile boolean prepared = false;
private volatile boolean readytoplay = false;
private volatile boolean playing = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
iv = (ImageView)findViewById(R.id.iv);
iv.bringToFront();
vv = (VideoView)findViewById(R.id.vv);
b = BitmapFactory.decodeResource(getResources(), R.drawable.babyblack);
iv.setBackgroundColor(0xFFDFA679);
vv.getHolder().addCallback(this);
mp.setOnPreparedListener(this);
mp.setOnCompletionListener(this);
try {
mp.setDataSource(this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.ape));
} catch (IllegalArgumentException e) {
Log.d(TAG,"illegal argument exception on set data source");
e.printStackTrace();
} catch (SecurityException e) {
Log.d(TAG,"security exception on set data source");
e.printStackTrace();
} catch (IllegalStateException e) {
Log.d(TAG,"illegal state exception on set data source");
e.printStackTrace();
} catch (IOException e) {
Log.d(TAG,"IO exception on set data source");
e.printStackTrace();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float dx, dy;
Log.d(TAG,"touch event");
if (!playing && event.getAction() == MotionEvent.ACTION_UP) {
Log.d(TAG,"action up");
if (prepared) {
playing = true;
Log.d(TAG,"hardware accelerated: iv="+iv.isHardwareAccelerated()+", vv="+vv.isHardwareAccelerated());
mp.start();
Log.d(TAG, "playing video in onTouch callback");
Log.d(TAG,"hardware accelerated: iv="+iv.isHardwareAccelerated()+", vv="+vv.isHardwareAccelerated());
} else
readytoplay = true;
}
return true;
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
Log.d(TAG,"surface is created");
mp.setDisplay(vv.getHolder());
try {
mp.prepareAsync();
} catch (IllegalArgumentException e) {
Log.d(TAG,"illegal argument exception on prepare");
e.printStackTrace();
} catch (SecurityException e) {
Log.d(TAG,"security exception on prepare");
e.printStackTrace();
} catch (IllegalStateException e) {
Log.d(TAG,"illegal state exception on prepare");
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG,"video is prepared");
prepared = true;
if (readytoplay) {
playing = true;
mp.start();
iv.setVisibility(View.GONE);
Log.d(TAG,"playing video from prepared callback");
}
}
@Override
public void onCompletion(MediaPlayer arg0) {
Log.d(TAG,"video is done");
playing = false;
iv.setVisibility(View.VISIBLE);
}}
我改變了ImageView沒有圖像,但只是一個純色的背景。您需要的唯一數據文件是mp4電影。當您觸摸屏幕時,電影播放,隱藏在ImageView後面。當我觸摸它(mp.start()時發生)的屏幕上立即提亮,然後電影開始播放,並逐漸變暗了一下,然後再亮,最後當電影完成穩定。
我試過的硬件加速,並沒有硬件加速;沒有不同。我嘗試將Kindle Fire HD插入,而不是將其插入;沒有不同。
我會後,我使用,但不知道如何2秒的MP4文件。
你有樣品,你可以共享顯示這個?我還沒有看到這個問題,使用嵌入HTML5視頻與海報來僞造相同,但我沒有嘗試過使用videoView和疊加圖像。想知道如果這是覆蓋,這是造成神器..你有沒有嘗試覆蓋只有一半的視頻圖像(看看它之間有什麼區別和它不是)之間的區別? – Offbeatmammal
@Offbeatmammal - 試過了,沒有。一旦mp.start()被調用,整個屏幕變亮並在電影完成時變暗。即使你看不到電影(因爲它被jpg隱藏),屏幕也會變亮。因此,它看起來像屏幕亮度參數正在調整,但我把亮度一直向上,它仍然發生。非常令人費解;將繼續嘗試。是的,如果我可以一起採取行動,示例代碼將會很好。 – SeaRisk
這可能與硬件加速有關嗎?試圖測試這個假設,但不知道如何。就好像啓動電影播放器改變了屏幕的渲染方式(包括與電影播放器無關的屏幕部分)。 – SeaRisk