android在线视频播放

这段时间,老是看到在线视频播放的资料,就总结了一下:

1.本地视频播放我想就不用怎么说了吧,不管是VideoView、surfaceView、mediaPlayer都能够播放的。

2.在线播放服务器视频:

a.可以使渐进式下载格式的视频,通过url直接用VideoView或者surfaceView都可以播放

b.还可以使流媒体格式的视频(这个效果最好,最主流。可惜我看了些资料,也没搞定。。。)

下面把实现的渐进式下载格式播放视频的代码附上:

package cn.itcast.videoplayer;

import java.io.File;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
private EditText nameText;
private String path;
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private boolean pause;
private int position;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mediaPlayer = new MediaPlayer();
nameText = (EditText) this.findViewById(R.id.filename);
surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);

surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(176, 144);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceCallback());
}

private final class SurfaceCallback implements Callback{
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceCreated(SurfaceHolder holder) {
if(position>0 && path!=null){
play(position);
position = 0;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
}
}

@Override
protected void onDestroy() {
mediaPlayer.release();
mediaPlayer = null;
super.onDestroy();
}

public void mediaplay(View v){
switch (v.getId()) {
case R.id.playbutton:
String filename = "http://daily3gp.com/vids/family_guy_penis_car.3gp";
if(filename.startsWith("http")){
path = filename;
play(0);
}else{
File file = new File(Environment.getExternalStorageDirectory(), filename);
if(file.exists()){
path = file.getAbsolutePath();
play(0);
}else{
path = null;
Toast.makeText(this, R.string.filenoexsit, 1).show();
}
}

break;

case R.id.pausebutton:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
pause = true;
}else{
if(pause){
mediaPlayer.start();
pause = false;
}
}
break;

case R.id.resetbutton:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
if(path!=null){
play(0);
}
}
break;
case R.id.stopbutton:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
}

private void play(int position) {
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(path);
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.prepare();//缓冲
mediaPlayer.setOnPreparedListener(new PrepareListener(position));
} catch (Exception e) {
e.printStackTrace();
}
}

private final class PrepareListener implements OnPreparedListener{
private int position;

public PrepareListener(int position) {
this.position = position;
}

public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();//播放视频
if(position>0) mediaPlayer.seekTo(position);
}
}
}



xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/filename"
    />
    
    <EditText
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/filename"
    />
    
    <LinearLayout
    android:orientation="horizontal"
     android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/play"
    android:id="@+id/playbutton"
    android:onClick="mediaplay"
    />
    <ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/pause"
    android:id="@+id/pausebutton"
    android:onClick="mediaplay"
    />
    <ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/reset"
    android:id="@+id/resetbutton"
    android:onClick="mediaplay"
    />
    <ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/stop"
    android:id="@+id/stopbutton"
    android:onClick="mediaplay"
    />            
    </LinearLayout>
    
    <SurfaceView
    android:layout_width="fill_parent"
    android:layout_height="240dp"
    android:id="@+id/surfaceView"
    />
</LinearLayout>



AndroidManifest.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.itcast.videoplayer"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>
    <uses-sdk android:minSdkVersion="5" />
<!-- 访问internet权限 -->
<uses-permission android:name="android.permission.INTERNET"/>


</manifest> 


我把url写死了,不然可以通过edittext输入url,url里放入的视频必须是渐进式下载格式的视频才可以。(如何把视频转换为渐进式下载格式的,可以通过代码实现,还可以用QuickTime软件 导出为渐进式下载格式)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值