Android MediaPlayer 多媒体(视频播放器)

Android之MediaPlayer详解,详细的Android学习指南 我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。字节高级Android经典面试题和答案。 阅读详情

MediaPlayer 可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用 MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。 SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical">
	<SeekBar android:id="@+id/SeekBar01" android:layout_height="wrap_content"
		android:layout_width="fill_parent"></SeekBar>
	<LinearLayout android:id="@+id/LinearLayout02"
		android:layout_width="wrap_content" android:layout_height="wrap_content">
		<Button android:id="@+id/Button01" android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="播放音频"></Button>
		<Button android:id="@+id/Button02" android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="停止播放"></Button>
	</LinearLayout>
	<SeekBar android:id="@+id/SeekBar02" android:layout_height="wrap_content"
		android:layout_width="fill_parent"></SeekBar>

	<SurfaceView android:id="@+id/SurfaceView01"
		android:layout_width="fill_parent" android:layout_height="250px"></SurfaceView>
	<LinearLayout android:id="@+id/LinearLayout02"
		android:layout_width="wrap_content" android:layout_height="wrap_content">
		<Button android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:id="@+id/Button03"
			android:text="播放视频"></Button>
		<Button android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="停止播放" android:id="@+id/Button04"></Button>
	</LinearLayout>
</LinearLayout>
package com.testMedia;

import java.io.IOException;  
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;  
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;  
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;  
import android.widget.Button;  
import android.widget.SeekBar;
import android.widget.Toast;  


public class TestMedia extends Activity {
    /** Called when the activity is first created. */ 

    private SeekBar skb_audio=null;
    private Button btn_start_audio = null;  
    private Button btn_stop_audio = null;

    private SeekBar skb_video=null;
    private Button btn_start_video = null;  
    private Button btn_stop_video = null;
    private SurfaceView surfaceView; 
    private SurfaceHolder surfaceHolder; 
    
    private MediaPlayer m = null;  
    private Timer mTimer;
    private TimerTask mTimerTask;
    
    private boolean isChanging=false;//互斥变量,防止定时器与SeekBar拖动时进度冲突
     @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        
        //----------Media控件设置---------//
        m=new MediaPlayer();
        
        //播放结束之后弹出提示
        m.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
			@Override
			public void onCompletion(MediaPlayer arg0) {
				Toast.makeText(testMedia.this, "结束", 1000).show();
				m.release();
			}
        });
        
      //----------定时器记录播放进度---------//
        mTimer = new Timer();
        mTimerTask = new TimerTask() {
            @Override
            public void run() {	
            	if(isChanging==true)
            		return;
            	
            	if(m.getVideoHeight()==0)
            		skb_audio.setProgress(m.getCurrentPosition());
            	else 
            		skb_video.setProgress(m.getCurrentPosition());
            }
        };

        mTimer.schedule(mTimerTask, 0, 10);
		
        btn_start_audio = (Button) this.findViewById(R.id.Button01);  
        btn_stop_audio = (Button) this.findViewById(R.id.Button02);  
        btn_start_audio.setOnClickListener(new ClickEvent());
        btn_stop_audio.setOnClickListener(new ClickEvent());
        skb_audio=(SeekBar)this.findViewById(R.id.SeekBar01);
        skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());
        
        btn_start_video = (Button) this.findViewById(R.id.Button03);  
        btn_stop_video = (Button) this.findViewById(R.id.Button04);  
        btn_start_video.setOnClickListener(new ClickEvent());
        btn_stop_video.setOnClickListener(new ClickEvent());
        skb_video=(SeekBar)this.findViewById(R.id.SeekBar02);
        skb_video.setOnSeekBarChangeListener(new SeekBarChangeEvent());
        surfaceView = (SurfaceView) findViewById(R.id.SurfaceView01);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.setFixedSize(100, 100);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }  
     
  /**
   * 按键事件处理
   */
  class ClickEvent implements View.OnClickListener{
	@Override
	public void onClick(View v) {
		if(v==btn_start_audio)
		{
			m.reset();//恢复到未初始化的状态
			m=MediaPlayer.create(testMedia.this, R.raw.big);//读取音频
			skb_audio.setMax(m.getDuration());//设置SeekBar的长度
			try {					
				m.prepare();	//准备
			} catch (IllegalStateException e) {			
				// TODO Auto-generated catch block				
				e.printStackTrace();				
			} catch (IOException e) {			
				// TODO Auto-generated catch block				
				e.printStackTrace();				
			}		
			m.start();	//播放
		}
		else if(v==btn_stop_audio || v==btn_stop_video)
		{
			m.stop();
		}
		else if(v==btn_start_video)
		{
			m.reset();//恢复到未初始化的状态
			m=MediaPlayer.create(testMedia.this, R.raw.test);//读取视频
			skb_video.setMax(m.getDuration());//设置SeekBar的长度
			m.setAudioStreamType(AudioManager.STREAM_MUSIC);
			m.setDisplay(surfaceHolder);//设置屏幕
			
			try {
			    m.prepare();
			    
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			m.start();
		}
	}
  }
  
  /**
   * SeekBar进度改变事件
   */
  class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener{

	@Override
	public void onProgressChanged(SeekBar seekBar, int progress,
			boolean fromUser) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onStartTrackingTouch(SeekBar seekBar) {
    	isChanging=true;
	}

	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		m.seekTo(seekBar.getProgress());
    	isChanging=false;	
	}
	  
  }

}

Android多媒体开发 Android多媒体开发系列文章 Android多媒体开发:录音机 Android多媒体开发:照相机 Android多媒体开发:第三方框架 一、什么是多媒体 多媒体(duō méi tǐ) 的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合 多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。 多媒体(Multi 阅读详情

相关推荐

安卓视频播放器开发源代码解析

在当今移动互联网时代,视频内容的消费已经成为人们日常生活中不可或缺的一部分。Android作为一个成熟的移动平台,其视频播放器应用开发是开发者们经常面临的一项任务。本章将从宏观的角度介绍Android视频播放器的基本概念,其在移动设备上的作用以及开发者需要考虑的关键因素。自定义播放控件为用户提供更丰富的交互体验,是开发视频播放器应用中不可或缺的部分。以下是实现自定义播放控件的两个核心环节:UI设计与交互逻辑,以及事件处理和反馈机制。

weixin_36197669的博客 1095

Android Studio实现多媒体播放器,音乐视频一体化

这次的网络版音乐视频播放器是在前面讲到的音乐播放器项目(Android Studio如何实现音乐播放器)基础上,将音乐文件与项目文件独立开,放在服务器的文件夹里面进行访问,除此之外还添加了视频播放器功能。本次项目综合了Android几乎所有知识,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程、多媒体播放器、适配器配置等。大家熟练掌握可以对以后的Android开发有非常大的帮助。

振华OPPO的博客世界 3万+

Android网络视频播放器完整源码解析

Android多媒体框架主要由两部分构成:本地(Native)层和Java框架层。本地层主要基于C/C++语言实现,提供了底层的音视频处理能力;而Java框架层则面向应用开发者,提供了更加简洁易用的API接口。两者通过JNI(Java Native Interface)进行桥接。MediaCodec是Android提供的用于访问底层媒体编解码器的API。它为开发者提供了一套控制编解码器硬件或软件的接口,允许直接从缓冲区处理输入和输出数据,从而进行媒体文件的编码和解码操作。

weixin_34471637的博客 792

56. 【Android教程】媒体播放器:MediaPlayer

Android 系统提供了几种播放音频和视频的方式,其中最常用的就是 MediaPlayer,和其他功能组件一样都有很多第三方框架提供更加丰富完备的功能,但是基本用法和时序基本都是参照 MediaPlayer 来设计的,本节就来看看 MediaPlayer 的使用方法。

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 8037

构建Android Studio视频播放器:从源码到实战

在移动互联网时代,多媒体应用是智能设备不可或缺的部分。Android系统为了满足用户在音频、视频以及其他媒体内容上的需求,提供了一个全面的多媒体框架——Media Framework。Media Framework不仅支持常见的音视频格式播放,还支持多种复杂媒体内容的处理和播放控制。ExoPlayer基于Android原生的API构建,但提供了更灵活的架构和更丰富的功能。它支持自定义的组件、扩展和渲染器,使得播放器能够适应不同的应用场景。

weixin_42588877的博客 1092

开源Android全屏视频播放器项目实战——节操视频播放器详解

抽象层的核心是定义一组通用播放接口,涵盖播放、暂停、跳转、获取状态等基本操作。以下是一个典型的接口设计:// 准备播放资源// 开始播放// 暂停播放// 跳转到指定位置// 释放播放资源// 查询是否正在播放// 获取当前播放进度// 获取总时长// 获取缓冲百分比// 设置渲染表面// 添加事件监听接口设计原则说明:所有方法命名遵循动词+宾语结构,语义明确。返回值尽量简化,避免返回复杂对象,便于跨引擎映射。提供。

weixin_35899324的博客 1291

Android多媒体框架:从MediaPlayer到NuPlayer

Android上经常会使用到MediaPlayer去播放音频和视频。但是从严格意义上来说,MediaPlayer并不是播放器本身,它只是Android框架层众多媒体播放器(包括ROM厂商自定义的播放器)的“壳”。 MediaPlayer的主要操作(包括但不限于播放、暂停、快进等)都会调用到框架层的播放器,比如常见的NuPlayer播放器。

yihanss的博客 2992

Docker启动安装nacos(详情讲解,全网最细)

docker安装nacos保姆级教程

ilvjiale的博客 8万+

MediaPlayer类播放音频

MediaPlayer的使用

A125679880的博客 4057

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 342

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3338

《android多媒体api》之MediaPlayer自定义视频播放器

MediaPlayer是什么? MediaPlayer类可用于控制音频/视频文件或流的播放。前面介绍了VideoView 跟MediaPlayer用法基本相同,不过MediaPlayer使用时候注意他有个缓存机制,如果没有缓存视频是不能够播放的;这里实现了一个基于MediaPlayer实现自定义视频播放器,具有功能播放、暂停、停止、进度条调整视频播放进度等。案例是通过surfaceview来显示画面,用seekbar

一航jason 2558

Jetson Orin NX 单目标跟踪算法实战

本文对比了NanoTrack和MixFormerV2两种目标跟踪算法在Jetson Orin NX边缘设备上的实际表现。通过天空小目标跟踪场景测试发现,NanoTrack虽然表征能力较弱,但具有目标身份一致性强、失败模式可控、计算负担小等优势,更适合作为边缘端默认算法。MixFormerV2则适用于高速运动等特定场景。实验数据显示NanoTrack在Orin NX上可达200FPS,远高于MixFormerV2的38-120FPS。建议先采用NanoTrack构建稳定系统,后续再评估复杂算法的适用性。

karmueo46的博客 625

Android多媒体之视频播放器(基于MediaPlayer)

零、前言 对于视频的播放,Android有内置的VideoView,用起来非常简单 本篇从自定义VideoView来封装MediaPlayer开始说起 &lt;VideoView android:id="@+id/id_vv" android:layout_width="match_parent" android:...

张风捷特烈的博客 2117

告别ZotFile!Zotero 7+百度网盘文献同步全攻略(含软链接避坑指南)

本文针对Zotero 7用户,提供了告别ZotFile插件后,利用百度网盘实现文献附件同步的完整解决方案。详细讲解了如何通过设置Zotero链接目录与创建软链接,将附件库迁移至云盘,并附有详细的避坑指南,确保数据安全与多设备同步的稳定性。

mmm90的博客 586

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3531

MediaPlayer Android 下播放 MP4 的问题

开发环境:Delphi 10.3.1 社区版。 测试环境: A. Android 5.0; B. Android 9.0 1. 进度条 Delphi 官方带的例子里面,关于进度条的代码: procedure TForm1.Timer1Timer(Sender: TObject); begin if ProgressBar1.Max <> MediaPlayer1...

pcplayer的博客 3414

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 289

【Android 多媒体开发】 MediaPlayer 网络视频播放器

.....

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 8263

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2054

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【亲测免费】 DKVideoPlayer 安装和配置指南

### 项目基础介绍 DKVideoPlayer 是一个用于 Android 平台的视频播放器库,支持多种视频播放核心,包括 MediaPlayer、ExoPlayer 和 IjkPlayer。它模仿了抖音的播放效果,支持预加载、列表播放、悬浮播放、广告播放、弹幕、视频水印和视频滤镜等功能。 ### 主要编程语言 该项目主要使用 Java 和 Kotlin 进行开发。 ## 2. 项目使用的关...

gitblog_07306的博客 1040

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器

利用android SDK 提供的接口 开发最简单的视频播放demo。 接下来贴出main.xml的源码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:la

tx3344 9516

安卓音乐播放器和视频播放器实现

1.1实验名称 音乐播放器和视频播放器实验。 1.2实验背景 1.2.1需求分析 随着社会的快速发展,现今社会生活紧张,而欣赏音乐和视频是较好的舒缓压力的方式,音乐和视频成了我们生活工作中重要的组成部分。而移动时代的到来,智能手机应用越来越普遍。移动音乐视频服务正是为这一形势而发展起来,开发这种手机音乐播放器和视频播放器的应用,主要为了满足音乐视频爱好人群的需要,于是提出和实现了基于

cris001cris的博客 1593
上一篇: Android 多媒体(音乐播放器)
下一篇: Android的pull解析XML文件
G_MuHan
博客等级 码龄9年 31粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值