android简单视频播放器
来源:互联网 发布:python os fork exec 编辑:程序博客网 时间:2024/05/16 17:02
Android为视频播放提供了VideoView 和 MediaController 两个现成的组件,让我们可以方便的实现MP4、3GP等视频的播放。下面我们通过一个例子来看一下:
1、新建一个项目 Lesson28_Video
2、使用 Format Factory 这个软件压缩一个视频备用,我这里压缩的参数如下:
注意,如果播放时完全无法播放或者只有声音没有图像,你就需要换压缩软件和调整压缩参数重新压缩视频了,暂时只能这样,我也是折腾了2-3小时都是黑屏,郁闷中(似乎得出一个答案,是否黑屏和机器设备的性能有关,我降低压缩分辨率和每秒帧数,出图像音画同步,如果提高每秒帧数,声音出来后十几秒图像才会出来,但是出来后音画还是同步的,有兴趣的朋友可以多测试测试给出一个结论)。
用命令行的方式拷贝此视频到存储卡(sdcard)中,为什么不用eclipse中的可视化工具拷贝呢?因为那个方式靠大文件的时候经常失败,而命令行方式我没拷贝失败一次过。命令就是 adb push ,具体截个图给你看:
3、res\layout\main.xml的内容如下:
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
LINEARLAYOUT
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_height
=
"match_parent"
android:layout_width
=
"match_parent"
android:orientation
=
"vertical"
android:layout_gravity
=
"top"
>
3
<
VIDEOVIEW
android:layout_height
=
"fill_parent"
android:layout_width
=
"fill_parent"
android:id
=
"@+id/VideoView01"
>
4
</
VIDEOVIEW
>
5
</
LINEARLAYOUT
>
4、MainVideo.java的内容如下:
01
package
android.basic.lesson28;
03
import
android.app.Activity;
04
import
android.net.Uri;
05
import
android.os.Bundle;
06
import
android.view.Window;
07
import
android.view.WindowManager;
08
import
android.widget.MediaController;
09
import
android.widget.VideoView;
11
public
class
MainVideo
extends
Activity {
12
/** Called when the activity is first created. */
13
@Override
14
public
void
onCreate(Bundle savedInstanceState) {
15
super
.onCreate(savedInstanceState);
16
//全屏
17
this
.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
18
//标题去掉
19
this
.requestWindowFeature(Window.FEATURE_NO_TITLE);
20
//要在全屏等设置完毕后再加载布局
21
setContentView(R.layout.main);
23
//定义UI组件
24
VideoView videoView = (VideoView) findViewById(R.id.VideoView01);
25
//定义MediaController对象
26
MediaController mediaController =
new
MediaController(
this
);
27
//把MediaController对象绑定到VideoView上
28
mediaController.setAnchorView(videoView);
29
//设置VideoView的控制器是mediaController
30
videoView.setMediaController(mediaController);
32
//这两种方法都可以 videoView.setVideoPath("file:///sdcard/love_480320.mp4");
33
videoView.setVideoURI(Uri.parse(
"/sdcard/love_480320.mp4"
));
34
//启动后就播放
35
videoView.start();
36
}
37
}
5、运行效果如下:
三、简单录音程序
1、新建一个一个项目 Tip_Recorder,主activity名字是 MainActivity
2、其布局文件main.xml的代码是:
1
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
LINEARLAYOUT
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_height
=
"fill_parent"
android:layout_width
=
"fill_parent"
android:orientation
=
"vertical"
android:gravity
=
"center"
>
3
4
<
BUTTON
android:layout_height
=
"wrap_content"
android:layout_width
=
"wrap_content"
android:text
=
"录音"
android:textsize
=
"30sp"
android:id
=
"@+id/Button01"
></
BUTTON
>
5
<
BUTTON
android:layout_height
=
"wrap_content"
android:layout_width
=
"wrap_content"
android:text
=
"停止"
android:textsize
=
"30sp"
android:id
=
"@+id/Button02"
android:layout_margintop
=
"20dp"
></
BUTTON
>
6
</
LINEARLAYOUT
>
3、主程序文件 MainActivity.java的代码如下:
01
package
android.tip.yaoyao;
03
import
java.io.File;
04
import
java.io.IOException;
05
import
java.util.Calendar;
06
import
java.util.Locale;
07
08
import
android.app.Activity;
09
import
android.media.MediaRecorder;
10
import
android.os.Bundle;
11
import
android.text.format.DateFormat;
12
import
android.view.View;
13
import
android.widget.Button;
14
import
android.widget.Toast;
16
public
class
MainActivity
extends
Activity {
18
private
Button recordButton;
19
private
Button stopButton;
21
private
MediaRecorder mr;
23
@Override
24
public
void
onCreate(Bundle savedInstanceState) {
25
super
.onCreate(savedInstanceState);
26
setContentView(R.layout.main);
28
recordButton = (Button)
this
.findViewById(R.id.Button01);
29
stopButton = (Button)
this
.findViewById(R.id.Button02);
31
// 录音按钮点击事件
32
recordButton.setOnClickListener(
new
View.OnClickListener() {
34
@Override
35
public
void
onClick(View v) {
37
File file =
new
File(
"/sdcard/"
38
+
"YY"
39
+
new
DateFormat().format(
"yyyyMMdd_hhmmss"
,
40
Calendar.getInstance(Locale.CHINA)) +
".amr"
);
41
42
Toast.makeText(getApplicationContext(),
"正在录音,录音文件在"
+file.getAbsolutePath(), Toast.LENGTH_LONG)
43
.show();
45
// 创建录音对象
46
mr =
new
MediaRecorder();
48
// 从麦克风源进行录音
49
mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
51
// 设置输出格式
52
mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
54
// 设置编码格式
55
mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
57
// 设置输出文件
58
mr.setOutputFile(file.getAbsolutePath());
60
try
{
61
// 创建文件
62
file.createNewFile();
63
// 准备录制
64
mr.prepare();
65
}
catch
(IllegalStateException e) {
66
e.printStackTrace();
67
}
catch
(IOException e) {
68
e.printStackTrace();
69
}
70
// 开始录制
71
mr.start();
72
recordButton.setText(
"录音中……"
);
73
}
74
});
76
// 停止按钮点击事件
77
stopButton.setOnClickListener(
new
View.OnClickListener() {
79
@Override
80
public
void
onClick(View v) {
82
if
(mr !=
null
) {
83
mr.stop();
84
mr.release();
85
mr =
null
;
86
recordButton.setText(
"录音"
);
87
Toast.makeText(getApplicationContext(),
"录音完毕"
, Toast.LENGTH_LONG).show();
88
}
89
}
90
});
92
}
94
}
4、因为录音和写存储卡都需要权限声明,所以这里也把AndroidManifest.xml代码提供出来:
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
MANIFEST
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:versionname
=
"1.0"
android:versioncode
=
"1"
package
=
"android.tip.yaoyao"
>
03
<
APPLICATION
android:icon
=
"@drawable/icon"
android:label
=
"@string/app_name"
android:debuggable
=
"true"
>
04
<
ACTIVITY
android:label
=
"@string/app_name"
android:configchanges
=
"orientation|keyboardHidden|keyboard"
android:screenorientation
=
"portrait"
android:name
=
".MainActivity"
>
05
<
INTENT
-filter>
06
<
ACTION
android:name
=
"android.intent.action.MAIN"
/>
07
<
CATEGORY
android:name
=
"android.intent.category.LAUNCHER"
/>
08
</
INTENT
>
09
</
ACTIVITY
>
11
</
APPLICATION
>
12
<
USES
android:minsdkversion
=
"4"
-sdk />
14
<
USES
android:name
=
"android.permission.RECORD_AUDIO"
-permission></
USES
>
15
<
USES
android:name
=
"android.permission.WRITE_EXTERNAL_STORAGE"
-permission></
USES
>
16
</
MANIFEST
>
5、编译并运行程序,查看结果。
点击录音:
录音文件在存储卡的根目录几个以YY开头的amr文件
6、这个例子要用到录音设备,而模拟器并不能把电脑声卡模拟出来使用,因此这个例子必须在真机上进行测试。 真机上测试方法也很简单。
- 在真机上把USB调试模式打开,
- 把真机用USB线与电脑连接
- 设置电脑和手机的连接方式为 ”仅充电“(此时手机可以操作存储卡)
- 打开Eclipse,在不选择模拟器的情况下运行程序,此时,Eclipse会自动找到真机,并使用它运行程序,最完美的是他可以把真机运行程序的输出信息,照样输出在Eclipse中的Logcat日志中。
上面的真机截图也是通过Eclipse的DDMS窗口直接抓取的,下图中右上角颜色最深的图标就是抓取真机截图的按钮:
- android简单视频播放器
- Android 简单视频播放器
- Android 简单定制一个视频播放器
- 【Android SurfaceView】视频播放器 简单例子
- Android简单本地视频播放器
- Android简单网络视频播放器
- android基于ffmpeg的简单视频播发器 播放视频
- android视频播放简单demo
- Android VideoView简单播放视频
- Android VideoView简单播放视频
- Android 简单IjkVideoView视频播放
- Android 简单IjkVideoView播放视频
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android源代码下载指南(图解)
- VisualAssist 快捷键
- 记事本的编码问题
- Android多媒体(Media)入门
- eclipse常用配置
- android简单视频播放器
- Android传感器编程入门
- Android手机摄像头编程入门
- Linux分区方案、文件结构与挂载
- poj 2127
- Android动画入门(一)
- Android Web Url
- oracle中imp命令
- 大型网站系统架构分析