快捷导航

聊聊android中的多媒体技术2024/5/22

[复制链接]
查看: 7|回复: 0
发表于 2024-5-22 13:23:27 | 显示全部楼层 |阅读模式

  Hello,大家晚上好,终于又相聚了,分别的这几天里我正在忙于一个叫做加密记事本的小项目,虽然直到今天还没有完善的很好,但是真心说很想大家,所以来和你们分享一下接下来的新知识吧!教学中控http://www.lihongcctv.com/zhjy/znwlzk/551.html力弘(HLEEHAM)品牌厂家主要生产智慧互动教室终端、录播主机、教学触控终端、多媒体网络中控、HDMI/VGA/DVI混合矩阵切换器、网络高清数字矩阵、视频矩阵、音视频管理中心主机、大屏拼接处理器、无缝拼接矩阵等。力弘(HLEEHAM)品牌产品线涵盖智慧教育、音视频控制系统、矩阵系统、网络中控系统等。咨询热线:13325912906


  今天这一篇就讲讲Android的多媒体吧,我想这一定是大家都很感兴趣的地方吧,是不是有些迫不及待了呢,那就快快开始吧!

  一.Android的多媒体基础

  1.基本类:有两个基本类是Android框架中用来播放音视频的类;

  (1)MediaPlayer:提供了Android播放音视频所需要的所有API;

  (2)AudioManager:用来管理音视频资源和音频输出设备;

  2.这里详细说一下MediaPlayer的相关知识:

  (1)MediaPlayer对象的生命周期:

  (2)常用方法:

  方法:create(Context context, Uri uri)方法:create(Context context, Uri uri)

  解释:静态方法,通过Uri创建一个多媒体播放器。

  方法:create(Context context, int resid)

  解释:静态方法,通过资源ID创建一个多媒体播放器

  方法:create(Context context, Uri uri, SurfaceHolder holder)

  解释:静态方法,通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器

  方法: getCurrentPosition()

  解释:返回 Int, 得到当前播放位置

  方法: getDuration()

  解释:返回 Int,得到文件的时间

  方法:getVideoHeight()

  解释:返回 Int ,得到视频的高度

  方法:getVideoWidth()

  解释:返回 Int,得到视频的宽度

  方法:isLooping()

  解释:返回 boolean ,是否循环播放

  方法:isPlaying()

  解释:返回 boolean,是否正在播放

  方法:pause()

  解释:无返回值 ,暂停

  方法:prepare()

  解释:无返回值,准备同步

  方法:prepareAsync()

  解释:无返回值,准备异步

  方法:release()

  解释:无返回值,释放 MediaPlayer 对象

  方法:reset()

  解释:无返回值,重置 MediaPlayer 对象

  方法:seekTo(int msec)

  解释:无返回值,指定播放的位置(以毫秒为单位的时间)

  方法:setAudioStreamType(int streamtype)

  解释:无返回值,指定流媒体的类型

  方法:setDataSource(String path)

  解释:无返回值,设置多媒体数据来源【根据 路径】

  方法:setDataSource(FileDescriptor fd, long offset, long length)

  解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】

  方法:setDataSource(FileDescriptor fd)

  解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】

  方法:setDataSource(Context context, Uri uri)

  解释:无返回值,设置多媒体数据来源【根据 Uri】

  方法:setDisplay(SurfaceHolder sh)

  解释:无返回值,设置用 SurfaceHolder 来显示多媒体

  方法:setLooping(boolean looping)

  解释:无返回值,设置是否循环播放

  事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)

  解释:监听事件,网络流媒体的缓冲监听

  事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener)

  解释:监听事件,网络流媒体播放结束监听

  事件:setOnErrorListener(MediaPlayer.OnErrorListener listener)

  解释:监听事件,设置错误信息监听

  事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)

  解释:监听事件,视频尺寸监听

  方法:setScreenOnWhilePlaying(boolean screenOn)

  解释:无返回值,设置是否使用 SurfaceHolder 显示

  方法:setVolume(float leftVolume, float rightVolume)

  解释:无返回值,设置音量

  方法:start()

  解释:无返回值,开始播放

  方法:stop()

  解释:无返回值,停止播放

  二.音频的播放

  其实除了这个类还有一个音乐播放类那就是SoundPool,这两个类各有不同分析一下便于大家理解

  1.MediaPlayer:

  此类适合播放较大文件,此类文件应该存储在SD卡上,而不是在资源文件里,还有此类每次只能播放一个音频文件。

  此类用法如下:

  (1)从资源文件中播放

  MediaPlayer player = new MediaPlayer.create(this,R.raw.test);

  player.start();

  (2)从文件系统播放MediaPlayer player = new MediaPlayer();

  String path = "/sdcard/test.mp3";

  player.setDataSource(path);

  player.prepare();

  player.start();

  (3)从网络播放

  (1)通过URI的方式:String path="http:/"d:/english.mp4")));

  mp.setDisplay(sv.getHolder());

  mp.prepare();

  mp.start();

  } catch (IllegalArgumentException e) {

  e.printStackTrace();

  } catch (SecurityException e) {

  e.printStackTrace();

  } catch (IllegalStateException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  public void getPosition(){

  if(mp.isPlaying()){

  int timeAll=mp.getDuration();

  System.out.println(timeAll);

  int time=mp.getCurrentPosition();

  System.out.println(time);

  }

  }

  @Override

  public void onClick(View v) {

  switch (v.getId()) {

  case R.id.button1:

  play();

  getPosition();

  break;

  case R.id.button2:

  if(mp.isPlaying()){

  mp.pause();

  }else{

  mp.start();

  }

  getPosition();

  break;

  case R.id.button3:

  mp.seekTo(60000);

  getPosition();

  break;

  case R.id.button4:

  mp.stop();

  getPosition();

  break;

  }

  }

  }

  (2)xml

  xmlns:tools="http://schemas.android.com/tools"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  androidrientation="vertical"

  tools:context=".MainActivity" >

  android:id="@+id/surfaceView1"

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:layout_weight="1"/>

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  androidrientation="horizontal" >

  android:id="@+id/button1"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:layout_weight="1"

  android:text="开始" />

  android:id="@+id/button2"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:layout_weight="1"

  android:text="暂停" />

  android:id="@+id/button3"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:layout_weight="1"

  android:text="指定" />

  android:id="@+id/button4"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:layout_weight="1"

  android:text="停止" />
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

精彩推荐

个人留言

  • 反馈建议:麻烦到管理处反馈
  • 我的电话:这个不能给
  • 工作时间:周一到周五

关于我们

云服务支持

精彩文章,快速检索

关注我们

Copyright 乐游四方  Powered by©  技术支持:飛    ( 闽ICP备2023009016号-6 )