當前位置:
首頁 > 知識 > [原創] 使用 Vitamio 播放視頻作為 Splash 時出現失真情況的解決方案

[原創] 使用 Vitamio 播放視頻作為 Splash 時出現失真情況的解決方案

目前在做關於視頻及流媒體播放項目時,有這樣一個需求,應用啟動時的 Splash 要求播放一段動畫。其中視頻播放的庫使用是 Vitamio。

最開始要播放的文件比較大,有 18M+,在手機播放時畫質非常好。但是一個 Splash 沒有必要這麼大,由於把視頻壓縮了下,變成了 1.5M+,這迴文件大小是可以了,用電腦播放器播放時,畫質和之前的大文件比沒有太大的變化,但是在手機中播放時,卻出現了很嚴重的失真現象。

這是怎麼回事?最後經過調查,設置了一些參數,再次用手機播放時和電腦播放的效果一樣了,沒有出現失真的現象。現將完整解決方案與大家分享下:

說明:

代碼中刪除了和演示無關的業務代碼。

測試用機: XiaoMi 2S Android 5.0.2

import android.app.Activity;
import android.content.Intent;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Handler;
// ...... 省略其它不必要的 import
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.Vitamio;
import io.vov.vitamio.widget.VideoView;

public class SplashActivity extends Activity {
private static final String TAG = SplashActivity.class.getSimpleName;

/**
* Duration of wait *
*/
private static final int SPLASH_DISPLAY_LENGTH = 2500;

/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
Vitamio.isInitialized(getApplicationContext);

InputStream ins = getResources.openRawResource(R.raw.splash_anim);
File tmpFile = null;
OutputStream output;

try {
tmpFile = File.createTempFile("splash", "mov");
output = new FileOutputStream(tmpFile);

final byte buffer = new byte[102400];
int read;

while ((read = ins.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush;
output.close;
ins.close;
} catch (IOException e) {
e.printStackTrace;
}

final io.vov.vitamio.widget.VideoView videoView = new VideoView(this);
videoView.setHardwareDecoder(true);
videoView.setVideoChroma(MediaPlayer.VIDEOCHROMA_RGB565);
// This method below will remove the black screen that appears before playing video
videoView.setZOrderOnTop(true);
videoView.setVideoPath(tmpFile.getPath);

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// optional need Vitamio 4.0
ALog.i(TAG, "onPreparedListener");
videoView.setBackground(null);
mediaPlayer.setAdaptiveStream(true);
mediaPlayer.setPlaybackSpeed(1.0f);
mediaPlayer.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync;
mediaPlayer.start;
}
});

setContentView(videoView);

new Handler.postDelayed(new Runnable {
@Override
public void run {
ALog.d(TAG, "Ready to start initialization activity");
Intent intent = new Intent(SplashActivity.this, Mainctivity.class);
startActivity(intent);
finish;
}
}, SPLASH_DISPLAY_LENGTH);
}
}

備註

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

基於三台主機部署phpwind
聊聊synchronized的鎖問題
yii2 隊列 shmilyzxt/yii2-queue 簡介
LayUI分頁,LayUI動態分頁,LayUI laypage分頁

TAG:科技優家 |

您可能感興趣

泰星Jamesji與真情侶taew&ton,toey&Lek同游北海道,變電燈泡了
BTS閔玧其與Suran傳緋聞,評論見真情!
Baobab新VR短片《Jack》跨越虛擬和物理世界,帶來情緒化真情體驗
真情實感的追劇是要(yan)遭(zhi)報(xia)應(xian)的!
Angelababy點贊楊冪,是塑料姐妹情,還是患難見真情?
OPPO Reno體驗官真情回饋,原來這款手機的如此的出色!
Awaken-F正式啟航 首支單曲真情實感有「你」相伴
selina張軒睿的戀情,是真情還是作秀?看H和E留言就懂了
朱正廷justin微博公開發糖,cp粉卻都在為一句話真情實感
《跨越8年的新娘》發布主題曲MV 「日本五月天」back number真情獻唱
防彈少年團:RM,J-Hope,SUGA的真情告白
這是真情懷啊!幾百元買iPhone4s!
Selina逢人就說:「在戀愛」,為了節目效果還是真情流露?
楊冪生日,angelababy真情祝福,九個字讓人感慨萬千
躍讀:《新名字的故事》,比塑料姐妹花drama的真情
Selina逢人就說:「我們在戀愛」,為了節目效果還是真情流露?
林彥俊的粉絲Evansim,真情實感的表述:我為什麼喜歡他?
天蠍座名人:黃曉明&宋慧喬|超浪漫!黃曉明真情剖白 今生註定要娶Angelababy的3個原因
悼文見真情:看早逝DJ巨星Avicii與各路明星的愛恨情仇
真情實感追星實記 從EXO著裝style里獲取靈感的設計