1# Interface (MediaSource) 2<!--Kit: Media Kit--> 3<!--Subsystem: Multimedia--> 4<!--Owner: @wang-haizhou6--> 5<!--Designer: @HmQQQ--> 6<!--Tester: @xchaosioda--> 7<!--Adviser: @zengyawen--> 8 9> **说明:** 10> 11> - 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 12> - 本Interface首批接口从API version 12开始支持。 13 14媒体数据信息。来源自[createMediaSourceWithUrl](arkts-apis-media-f.md#mediacreatemediasourcewithurl12)。 15 16**系统能力:** SystemCapability.Multimedia.Media.Core 17 18## 导入模块 19 20```ts 21import { media } from '@kit.MediaKit'; 22``` 23 24## setMimeType<sup>12+</sup> 25 26setMimeType(mimeType: AVMimeTypes): void 27 28设置媒体MIME类型,以帮助播放器处理扩展的媒体源。 29 30**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 31 32**系统能力:** SystemCapability.Multimedia.Media.Core 33 34**参数:** 35 36| 参数名 | 类型 | 必填 | 说明 | 37| -------- | -------- | ---- | -------------------- | 38| mimeType | [AVMimeTypes](arkts-apis-media-e.md#avmimetypes12) | 是 | 媒体MIME类型。 | 39 40## setMediaResourceLoaderDelegate<sup>18+</sup> 41 42setMediaResourceLoaderDelegate(resourceLoader: MediaSourceLoader): void 43 44设置MediaSourceLoader,帮助播放器请求媒体数据。 45 46**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 47 48**系统能力:** SystemCapability.Multimedia.Media.Core 49 50**参数:** 51 52| 参数名 | 类型 | 必填 | 说明 | 53| -------- | -------- | ---- | -------------------- | 54| resourceLoader | [MediaSourceLoader](arkts-apis-media-i.md#mediasourceloader18) | 是 | 应用实现的媒体数据获取接口,方便播放器获取数据。 | 55 56**示例:** 57 58```ts 59import { HashMap } from '@kit.ArkTS'; 60import { media } from '@kit.MediaKit'; 61 62let headers: Record<string, string> = {"User-Agent" : "User-Agent-Value"}; 63let mediaSource : media.MediaSource = media.createMediaSourceWithUrl("http://xxx", headers); 64let uuid: number = 1; 65let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 66 67let sourceOpenCallback: media.SourceOpenCallback = (request: media.MediaSourceLoadingRequest) => { 68 console.log(`Opening resource: ${request.url}`); 69 // 成功打开资源,返回唯一的句柄, 保证uuid和request对应。 70 uuid += 1; 71 requests.set(uuid, request); 72 return uuid; 73}; 74 75let sourceReadCallback: media.SourceReadCallback = (uuid: number, requestedOffset: number, requestedLength: number) => { 76 console.log(`Reading resource with handle ${uuid}, offset: ${requestedOffset}, length: ${requestedLength}`); 77 // 判断uuid是否合法、存储read请求,不要在read请求阻塞去推送数据和头信息。 78}; 79 80let sourceCloseCallback: media.SourceCloseCallback = (uuid: number) => { 81 console.log(`Closing resource with handle ${uuid}`); 82 // 清除当前uuid相关资源。 83 requests.remove(uuid); 84}; 85 86// 应用按需实现。 87let resourceLoader: media.MediaSourceLoader = { 88 open: sourceOpenCallback, 89 read: sourceReadCallback, 90 close: sourceCloseCallback 91}; 92 93mediaSource.setMediaResourceLoaderDelegate(resourceLoader); 94```