• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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```