媒体描述信息开发
场景介绍
媒体描述信息主要工作是支持多媒体的相关描述信息的存取。
接口说明
媒体描述信息类AVDescription的主要接口
媒体描述信息内部静态类AVDescription.Builder的主要接口
开发步骤
1. 调用AVDescription.Builder类的build方法创建AVDescription实例。代码示例如下:
String pathName = "/data/data/com.example.myapplication/files/test.png"; ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions(); srcOpts.formatHint = "image/png"; ImageSource imageSource = ImageSource.create(pathName, srcOpts); ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions(); decodingOpts.desiredSize = new Size(0, 0); decodingOpts.desiredRegion = new Rect(0, 0, 0, 0); PixelMap pixelMap = imageSource.createPixelmap(0, decodingOpts); Uri iconUri = Uri.parse("http://test.icon"); Uri mediaUri = Uri.parse("http://test.mp4"); PacMap pacMap = new PacMap(); AVDescription avDescription = new AVDescription.Builder().setExtras(null) .setMediaId("1") .setDescription("Description") .setIconUri(iconUri) .setIMediaUri(mediaUri) .setExtras(pacMap) .setIcon(pixelMap) .setTitle("title") .setSubTitle("subTitle") .build();
2. (可选)根据已有的AVDescription对象,可以获取媒体的描述信息,如获取媒体Uri,代码示例如下:
Uri uri = avDescription.getMediaUri();
3. (可选)根据已有的AVDescription对象,可以将媒体的描述信息写入Parcel对象,代码示例如下:
Parcel parcel = Parcel.create(); boolean result = avDescription.marshalling(parcel);
4. (可选)根据已有的Parcel对象,可以读取到AVDescription对象,实现媒体描述信息的写入,代码示例如下:
boolean result = avDescription.unmarshalling(parcel);
媒体元数据开发
场景介绍
媒体元数据主要用于媒体数据的存放和读取,包含诸如媒体资源的描述、创建日期、作者、封面图片等等。
接口说明
媒体元数据存放类AVMetadata.Builder的主要接口
媒体元数据类AVMetadata的主要接口
开发步骤
1. 调用AVMetadata.Builder类的build方法创建AVMetadata实例。代码示例如下:
String pathName = "/data/data/com.example.myapplication/files/test.png"; ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions(); srcOpts.formatHint = "image/png"; ImageSource imageSource = ImageSource.create(pathName, srcOpts); ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions(); decodingOpts.desiredSize = new Size(0, 0); decodingOpts.desiredRegion = new Rect(0, 0, 0, 0); PixelMap pixelMap = imageSource.createPixelmap(0, decodingOpts); AVMetadata avMetadata = new AVMetadata.Builder().setString(AVMetadata.AVTextKey.META_ID, "illuminate.mp3") .setString(AVMetadata.AVTextKey.TITLE, "title") .setString(AVMetadata.AVTextKey.ARTIST, "artist") .setString(AVMetadata.AVTextKey.ALBUM, "album") .setString(AVMetadata.AVTextKey.TITLE, "display_subtitle") .setPixelMap(AVMetadata.AVPixelMapKey.ICON, pixelmap) .build();
2. (可选)根据已有的AVMetadata对象,可以获取媒体元数据信息,如获取媒体标题等,代码示例如下:
String title = avMetadata.getString(AVMetadata.AVTextKey.TITLE);
3. 将已有的媒体元数据AVMetadata对象下发给应用,示例如下:
AVSession mediaSession = new AVSession(this, "AVService"); mediaSession.setAVMetadata(avMetadata);
4. 应用获取媒体元数据一般结合AVControllerCallback相关类使用。
Image musicCover; Text musicTitle; public class Callback extends AVControllerCallback { @Override public void onAVMetadataChanged(AVMetadata metadata) { // 歌曲信息回调 AVDescription description = metadata.getAVDescription(); // 获取标题 String title = description.getTitle().toString(); CharSequence sequence = metadata.getText(AVMetadata.AVTextKey.TITLE); if (sequence != null) { title = sequence.toString(); } // 设置媒体title musicTitle.setText(title); // 获取曲目专封面 PixelMap iconPixelMap = description.getIcon(); // 设置歌曲封面图 musicCover.setPixelMap(iconPixelMap); } }