一、 NuPlayer简介
NuPlayer是安卓系统自带的音视频播放器,其名称源自于“New”(新)和“Universal”(通用)的缩写。在安卓4.1(API level 16)版本推出后,NuPlayer取代了OpenCore作为系统默认的音视频播放器。
NuPlayer优化了系统对于媒体资源的使用,提高了视频和音频的性能和体验。它具有多种解码器和渲染器,支持多种媒体格式和协议,在视频、音频解码、串流、播放器间通信等方面都有很强的能力。
二、 NuPlayer的特点
1.支持多种媒体格式和协议
NuPlayer支持多种常用媒体格式,如H.264, MPEG-4, H.263, Mp3等并支持HTTP,RTSP 和 UDT协议,方便进行多种输入流管理。
2.优化的性能和体验
NuPlayer对系统播放效率进行了优化,改善了视频和音频的运行效率,加强了用户体验。同时,NuPlayer还支持HLS、DASH、Http Smooth等协议,以提供更好的流畅度,快速的启动以及媒体质量的提升。
3.易于拓展
NuPlayer与MediaPlayer和ExoPlayer有着相似的架构,易于扩展和定制。在Android系统中,NuPlayer是基于IOMX组件在C++层实现的,通过IOMX组件,NuPlayer支持硬件加速。同时,开发者可以通过添加新的用于解码媒体的Codec管理器对其进行定制。
三、 NuPlayer的应用
NuPlayer广泛应用于安卓智能手机、平板电脑等移动设备上,并被Google应用于其Pixel系列手机上的移动影像技术的发展。同时,不少Android应用中也使用了NuPlayer的代码或依赖库。
四、 关键代码示例
1. 媒体播放器初始化
Uri uri = Uri.parse("http://www.example.com/sample.mp4"); try { MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(getApplicationContext(), uri); // 设置数据源 mediaPlayer.prepare(); // 给MediaPlayer准备资源 mediaPlayer.start(); // 开始播放 } catch (IOException e) { Log.e(TAG, "prepare() failed"); }
2. NuPlayer配置
private void configMediaFormat() { MediaFormat format = new MediaFormat(); format.setString(MediaFormat.KEY_MIME, "video/avc"); format.setInteger(MediaFormat.KEY_WIDTH, 1920); format.setInteger(MediaFormat.KEY_HEIGHT, 1080); format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, size); IOMXBufferPool pool = IOMXBufferPool.create("OMX.null"); MediaCodec codec = MediaCodec.createByCodecName("OMX.test"); codec.configure(format, mSurface, null, 0); codec.start(); }
3. NuPlayer渲染器
public class MyRenderer implements SurfaceHolder.Callback, MediaCodec.Callback { private Surface mSurface; ... @Override public void surfaceCreated(SurfaceHolder holder) { mSurface = holder.getSurface(); ... } @Override public void onInputBufferAvailable(MediaCodec codec, int index) { ByteBuffer inputBuffer = codec.getInputBuffer(index); ... } @Override public void onOutputBufferAvailable(MediaCodec codec, int index, MediaCodec.BufferInfo info) { ByteBuffer outputBuffer = codec.getOutputBuffer(index); ... } }
五、 总结
NuPlayer是安卓系统默认的音视频播放器,拥有着多种媒体解码器和渲染器,支持多种格式和协议,具有优秀的性能和体验。NuPlayer不仅被广泛应用于安卓智能设备上,并且其代码或依赖库还常常出现在各种应用中。