1# Interface (MediaSourceLoadingRequest) 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 18开始支持。 13 14用于定义加载请求的对象。应用程序通过该对象来获取请求的资源位置,通过该对象和播放器进行数据交互。 15 16## 导入模块 17 18```ts 19import { media } from '@kit.MediaKit'; 20``` 21 22## 属性 23 24**系统能力:** SystemCapability.Multimedia.Media.Core 25 26| 名称 | 类型 | 只读 | 可选 | 说明 | 27| --------------------------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 28| url | string | 否 | 否 | 资源url,需要应用程序打开的资源路径。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 29| header | Record<string, string> | 否 | 是 | 网络请求标头,如果存在,需要应用在下载数据时将头信息设置到http请求中。<br>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 | 30 31## respondData<sup>18+</sup> 32 33respondData(uuid: number, offset: number, buffer: ArrayBuffer): number 34 35用于应用程序向播放器发送数据。 36 37**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 38 39**系统能力:** SystemCapability.Multimedia.Media.Core 40 41**参数:** 42 43| 参数名 | 类型 | 必填 | 说明 | 44| -------- | -------- | ---- | -------------------- | 45| uuid | number | 是 | 资源句柄的标识。来源是[SourceOpenCallback](arkts-apis-media-t.md#sourceopencallback18)。 | 46| offset | number | 是 | 当前媒体数据相对于资源起始位置的偏移量。offset不能小于0。 | 47| buffer | ArrayBuffer | 是 | 响应播放器的媒体数据。<br/>**注意:** 不要传输无关数据,会影响正常数据解析和播放。 | 48 49**返回值:** 50 51| 类型 | 说明 | 52| -------------- | ----------------------------------- | 53| number | 当前服务端接受的字节数。<br>- 返回值小于0表示操作失败。<br>- 返回值为-2时,表示播放器不再需要当前数据,客户端应停止当前读取过程。<br>- 返回值为-3时,表示播放器的缓冲区已满,客户端应等待下一次读取。 | 54 55**示例:** 56 57```ts 58import { HashMap } from '@kit.ArkTS'; 59let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 60let uuid = 1; 61 62let request = requests.get(uuid); 63let offset = 0; // 当前媒体数据相对于资源起始位置的偏移量 64let buf = new ArrayBuffer(0); // 由应用定义,推送给播放器的数据 65let num = request?.respondData(uuid, offset, buf); 66``` 67 68## respondHeader<sup>18+</sup> 69 70respondHeader(uuid: number, header?: Record<string, string>, redirectUrl?: string): void 71 72用于应用程序向播放器发送响应头信息,应在第一次调用[respondData](#responddata18)方法之前调用。 73 74**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 75 76**系统能力:** SystemCapability.Multimedia.Media.Core 77 78**参数:** 79 80| 参数名 | 类型 | 必填 | 说明 | 81| -------- | -------- | ---- | -------------------- | 82| uuid | number | 是 | 资源句柄的标识。来源是[SourceOpenCallback](arkts-apis-media-t.md#sourceopencallback18)。 | 83| header | Record<string, string> | 否 | HTTP响应中的头部信息。应用可将头部信息字段与底层支持解析字段取交集传递或直接传入对应的所有头部信息。<br> - 底层播放需要解析的字段包括Transfer-Encoding、Location、Content-Type、Content-Range、Content-Encode、Accept-Ranges、content-length。 | 84| redirectUrl | string | 否 | 如果存在,为HTTP响应中的重定向URL。 | 85 86**示例:** 87 88```ts 89import { HashMap } from '@kit.ArkTS'; 90let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 91let uuid = 1; 92 93// 应用根据情况填充。 94let header:Record<string, string> = { 95 'Transfer-Encoding':'xxx', 96 'Location' : 'xxx', 97 'Content-Type' : 'xxx', 98 'Content-Range' : 'xxx', 99 'Content-Encode' : 'xxx', 100 'Accept-Ranges' : 'xxx', 101 'content-length' : 'xxx' 102}; 103let request = requests.get(uuid); 104request?.respondHeader(uuid, header); 105``` 106 107## finishLoading<sup>18+</sup> 108 109finishLoading(uuid: number, state: LoadingRequestError): void 110 111应用程序用于通知播放器当前请求状态的接口。针对服务侧请求的单个资源,推送完全部资源后需要发送LOADING_ERROR_SUCCESS状态告知该资源推送结束。 112 113**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 114 115**系统能力:** SystemCapability.Multimedia.Media.Core 116 117**参数:** 118 119| 参数名 | 类型 | 必填 | 说明 | 120| -------- | -------- | ---- | -------------------- | 121| uuid | number | 是 | 资源句柄的标识。来源是[SourceOpenCallback](arkts-apis-media-t.md#sourceopencallback18)。 | 122| state | [LoadingRequestError](arkts-apis-media-e.md#loadingrequesterror18) | 是 | 请求的状态。 | 123 124**示例:** 125 126```ts 127import { HashMap } from '@kit.ArkTS'; 128 129let requests: HashMap<number, media.MediaSourceLoadingRequest> = new HashMap(); 130let uuid = 1; 131 132let request = requests.get(uuid); 133let loadingError = media.LoadingRequestError.LOADING_ERROR_SUCCESS; 134request?.finishLoading(uuid, loadingError); 135```