今天终于在模拟器上面可以看到视频了,虽然随机性会有一些问题,但总体来说,效果还可以测试了avi和flv文件,播放的都比较好,因为是模拟器,我设置的输出格式是RGB565,这样看起来可能色彩不是很好。
上层的调用完全是标准的java接口,应用程序是参考一本资料书上面的,代码如下:
package irdc.ex07_13;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
public class EX07_13 extends Activity
{
private TextView mTextView01;
private VideoView mVideoView01;
private String strVideoPath = "";
private Button mButton01, mButton02;
private String TAG = "HIPPO_VIDEOVIEW";
/* 默认判别是否安装存储卡flag为false */
private boolean bIfSDExist = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/* 全屏幕 */
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
/* 判断存储卡是否存在 */
if(android.os.Environment.getExternalStorageState().equals
(android.os.Environment.MEDIA_MOUNTED))
{
bIfSDExist = true;
}
else
{
bIfSDExist = false;
mMakeTextToast
(
getResources().getText(R.string.str_err_nosd).toString(),
true
);
}
mTextView01 = (TextView)findViewById(R.id.myTextView1);
mVideoView01 = (VideoView)findViewById(R.id.myVideoView1);
mButton01 = (Button)findViewById(R.id.myButton1);
mButton02 = (Button)findViewById(R.id.myButton2);
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/* 播放影片路径1 */
strVideoPath = "file:///data/test.flv";
playVideo(strVideoPath);
}
});
mButton02.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/* 播放影片路径2 */
strVideoPath = "file:///data/test.avi";
playVideo(strVideoPath);
}
});
}
/* 自定义以VideoView播放影片 */
private void playVideo(String strPath)
{
if(strPath!="")
{
/* 调用VideoURI方法,指定解析路径 */
mVideoView01.setVideoURI(Uri.parse(strPath));
/* 设置控制Bar显示于此Context中 */
mVideoView01.setMediaController
(new MediaController(EX07_13.this));
mVideoView01.requestFocus();
/* 调用VideoView.start()自动播放 */
mVideoView01.start();
if(mVideoView01.isPlaying())
{
/* 下程序不会被运行,因start()后尚需要preparing() */
mTextView01.setText("Now Playing:"+strPath);
Log.i(TAG, strPath);
}
}
}
public void mMakeTextToast(String str, boolean isLong)
{
if(isLong==true)
{
Toast.makeText(EX07_13.this, str, Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(EX07_13.this, str, Toast.LENGTH_SHORT).show();
}
}
}
因为我的sdk有点问题,没有识别出来SD card,所以这里把视频都是push到data目录下面的。
基本上移植的过程可以说告一段落,感觉androi的框架本身都不难,主要是看ffmpeg的接口api看了几天,
然后音视频同步的算法还需要改正,创建了大概4个线程,这个还要仔细斟酌一下。
转: Android上ffmpeg移植(4)-终结篇
最新推荐文章于 2021-04-16 16:38:14 发布