# 音视频观测器 (/zh-CN/api-reference/rtc/cpp-all-platforms/play/mediaplayer/mediaplayer-observer)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

<a id="toc_mediaplayer_observer"></a>

<a id="api_imediaplayer_registeraudioframeobserver1_imediaplayer"></a>

<a id="ariaid-title2"></a>

## registerAudioFrameObserver [1/2] [#registeraudioframeobserver-12]

注册一个 [IAudioPcmFrameSink](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_iaudiopcmframesink) 音频帧观察者对象。

<a id="api_imediaplayer_registeraudioframeobserver1_imediaplayer__prototype"></a>

```cpp
virtual int registerAudioFrameObserver(media::IAudioPcmFrameSink* observer) = 0;
```

<a id="api_imediaplayer_registeraudioframeobserver1_imediaplayer__detailed_desc"></a>

你需要实现 [IAudioPcmFrameSink](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_iaudiopcmframesink) 类，并根据业务场景注册回调。注册成功后，每当接收到音频帧时，SDK 会触发对应的回调。

<a id="api_imediaplayer_registeraudioframeobserver1_imediaplayer__parameters"></a>

### 参数 [#参数]

<ParameterList>
<a id="observer"></a>
<Parameter name="observer">

音频帧观察者对象，详见 [IAudioPcmFrameSink](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_iaudiopcmframesink)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_registeraudioframeobserver1_imediaplayer__return_values"></a>

### 返回值 [#返回值]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="api_imediaplayer_registeraudioframeobserver2"></a>

<a id="api_imediaplayer_registeraudioframeobserver2_imediaplayer"></a>

<a id="ariaid-title3"></a>

## registerAudioFrameObserver [2/2] [#registeraudioframeobserver-22]

注册音频帧观测器对象。

<a id="api_imediaplayer_registeraudioframeobserver2_imediaplayer__prototype"></a>

```cpp
virtual int registerAudioFrameObserver(media::IAudioPcmFrameSink* observer, RAW_AUDIO_FRAME_OP_MODE_TYPE mode) = 0;
```

<a id="api_imediaplayer_registeraudioframeobserver2_imediaplayer__detailed_desc"></a>

<a id="api_imediaplayer_registeraudioframeobserver2_imediaplayer__parameters"></a>

### 参数 [#参数-1]

<ParameterList>
<a id="observer-1"></a>
<Parameter name="observer">

音频帧观测器对象。详见 [IAudioPcmFrameSink](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_iaudiopcmframesink)。

</Parameter>
<a id="mode"></a>
<Parameter name="mode">

音频帧的使用模式。详见 [RAW_AUDIO_FRAME_OP_MODE_TYPE](/zh-CN/api-reference/rtc/cpp-all-platforms/enum-rawaudioframeopmodetype)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_registeraudioframeobserver2_imediaplayer__return_values"></a>

### 返回值 [#返回值-1]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-1]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="api_imediaplayer_registerplayersourceobserver"></a>

<a id="ariaid-title4"></a>

## registerPlayerSourceObserver [#registerplayersourceobserver]

注册媒体播放器观察器。

<a id="api_imediaplayer_registerplayersourceobserver__prototype"></a>

```cpp
virtual int registerPlayerSourceObserver(IMediaPlayerSourceObserver* observer) = 0;
```

<a id="api_imediaplayer_registerplayersourceobserver__detailed_desc"></a>

用于监听播放过程中的事件。

<a id="api_imediaplayer_registerplayersourceobserver__timing"></a>

### 调用时机 [#调用时机]

该方法可以在加入频道前或加入频道后调用。

<a id="api_imediaplayer_registerplayersourceobserver__parameters"></a>

### 参数 [#参数-2]

<ParameterList>
<a id="observer-2"></a>
<Parameter name="observer">

用于监听播放过程中的事件。详见 [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_registerplayersourceobserver__return_values"></a>

### 返回值 [#返回值-2]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-2]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="api_imediaplayer_registervideoframeobserver_imediaplayer"></a>

<a id="ariaid-title5"></a>

## registerVideoFrameObserver [#registervideoframeobserver]

注册视频帧观察器对象。

<a id="api_imediaplayer_registervideoframeobserver_imediaplayer__prototype"></a>

```cpp
virtual int registerVideoFrameObserver(media::base::IVideoFrameObserver* observer) = 0;
```

<a id="api_imediaplayer_registervideoframeobserver_imediaplayer__detailed_desc"></a>

你需要实现 [IVideoFrameObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_ivideoframeobserver) 类，并根据你的使用场景注册回调。成功注册视频帧观察器后，SDK 每次接收到视频帧时都会触发已注册的回调。

<a id="api_imediaplayer_registervideoframeobserver_imediaplayer__parameters"></a>

### 参数 [#参数-3]

<ParameterList>
<a id="observer-3"></a>
<Parameter name="observer">

视频帧观察器。详见 [IVideoFrameObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_ivideoframeobserver)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_registervideoframeobserver_imediaplayer__return_values"></a>

### 返回值 [#返回值-3]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-3]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="api_imediaplayer_unregisteraudioframeobserver_imediaplayer"></a>

<a id="ariaid-title6"></a>

## unregisterAudioFrameObserver [#unregisteraudioframeobserver]

取消注册音频帧观察器。

<a id="api_imediaplayer_unregisteraudioframeobserver_imediaplayer__prototype"></a>

```cpp
virtual int unregisterAudioFrameObserver(media::IAudioPcmFrameSink* observer) = 0;
```

<a id="api_imediaplayer_unregisteraudioframeobserver_imediaplayer__detailed_desc"></a>

<a id="api_imediaplayer_unregisteraudioframeobserver_imediaplayer__parameters"></a>

### 参数 [#参数-4]

<ParameterList>
<a id="observer-4"></a>
<Parameter name="observer">

音频帧观察器。详见 [IAudioPcmFrameSink](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_iaudiopcmframesink)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_unregisteraudioframeobserver_imediaplayer__return_values"></a>

### 返回值 [#返回值-4]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-4]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="api_imediaplayer_unregisterplayersourceobserver"></a>

<a id="ariaid-title7"></a>

## unregisterPlayerSourceObserver [#unregisterplayersourceobserver]

释放媒体播放器观察者。

<a id="api_imediaplayer_unregisterplayersourceobserver__prototype"></a>

```cpp
virtual int unregisterPlayerSourceObserver(IMediaPlayerSourceObserver* observer) = 0;
```

<a id="api_imediaplayer_unregisterplayersourceobserver__detailed_desc"></a>

<a id="api_imediaplayer_unregisterplayersourceobserver__parameters"></a>

### 参数 [#参数-5]

<ParameterList>
<a id="observer-5"></a>
<Parameter name="observer">

媒体播放器观察者，用于监听播放过程中的事件。详见 [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_unregisterplayersourceobserver__return_values"></a>

### 返回值 [#返回值-5]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-5]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="api_imediaplayer_unregistervideoframeobserver_imediaplayer"></a>

<a id="ariaid-title8"></a>

## unregisterVideoFrameObserver [#unregistervideoframeobserver]

取消注册视频帧观察器。

<a id="api_imediaplayer_unregistervideoframeobserver_imediaplayer__prototype"></a>

```cpp
virtual int unregisterVideoFrameObserver(agora::media::base::IVideoFrameObserver* observer) = 0;
```

<a id="api_imediaplayer_unregistervideoframeobserver_imediaplayer__detailed_desc"></a>

<a id="api_imediaplayer_unregistervideoframeobserver_imediaplayer__parameters"></a>

### 参数 [#参数-6]

<ParameterList>
<a id="observer-6"></a>
<Parameter name="observer">

视频帧观察器。详见 [IVideoFrameObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_ivideoframeobserver)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_unregistervideoframeobserver_imediaplayer__return_values"></a>

### 返回值 [#返回值-6]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-6]

- [IMediaPlayer](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayer)

<a id="callback_imediaplayersourceobserver_onaudiovolumeindication_imediaplayersourceobserver"></a>

<a id="ariaid-title9"></a>

## onAudioVolumeIndication [#onaudiovolumeindication]

报告媒体播放器音量的回调。

<a id="callback_imediaplayersourceobserver_onaudiovolumeindication_imediaplayersourceobserver__prototype"></a>

```cpp
virtual void onAudioVolumeIndication(int volume) = 0;
```

<a id="callback_imediaplayersourceobserver_onaudiovolumeindication_imediaplayersourceobserver__detailed_desc"></a>

该回调每 200 毫秒触发一次。

<a id="callback_imediaplayersourceobserver_onaudiovolumeindication_imediaplayersourceobserver__parameters"></a>

### 参数 [#参数-7]

<ParameterList>
<a id="volume"></a>
<Parameter name="volume">

媒体播放器的音量，取值范围为 0 到 255。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-7]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_iaudiopcmframesink_onframe_iaudiopcmframesink"></a>

<a id="ariaid-title10"></a>

## onFrame [#onframe]

[onFrame](/zh-CN/api-reference/rtc/cpp-all-platforms/play/mediaplayer/mediaplayer-observer#callback_iaudiopcmframesink_onframe_iaudiopcmframesink) 回调。每次播放器接收到音频帧时触发。

<a id="callback_iaudiopcmframesink_onframe_iaudiopcmframesink__prototype"></a>

```cpp
virtual void onFrame(agora::media::base::AudioPcmFrame* frame) = 0;
```

<a id="callback_iaudiopcmframesink_onframe_iaudiopcmframesink__detailed_desc"></a>

注册音频帧观察器后，每次播放器接收到音频帧时，都会触发该回调，并报告该音频帧的详细信息。

<a id="callback_iaudiopcmframesink_onframe_iaudiopcmframesink__timing"></a>

### 触发时机 [#触发时机]

每次播放器接收到音频帧时触发。

<a id="callback_iaudiopcmframesink_onframe_iaudiopcmframesink__parameters"></a>

### 参数 [#参数-8]

<ParameterList>
<a id="frame"></a>
<Parameter name="frame">

音频帧信息，详见 [AudioPcmFrame](/zh-CN/api-reference/rtc/cpp-all-platforms/class-audiopcmframe)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-8]

- [IAudioPcmFrameSink](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_iaudiopcmframesink)

<a id="callback_imediaplayersourceobserver_onmetadata"></a>

<a id="ariaid-title11"></a>

## onMetaData [1/2] [#onmetadata-12]

接收到媒体元数据时触发的回调。

<a id="callback_imediaplayersourceobserver_onmetadata__prototype"></a>

```cpp
virtual void onMetaData(const void* data, int length) = 0;
```

<a id="callback_imediaplayersourceobserver_onmetadata__detailed_desc"></a>

该回调在播放器接收到媒体元数据时触发。

<a id="callback_imediaplayersourceobserver_onmetadata__parameters"></a>

### 参数 [#参数-9]

<ParameterList>
<a id="data"></a>
<Parameter name="data">

媒体元数据的详细数据。

</Parameter>
<a id="length"></a>
<Parameter name="length">

数据长度，单位为字节。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-9]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onplaybufferupdated"></a>

<a id="ariaid-title12"></a>

## onPlayBufferUpdated [#onplaybufferupdated]

报告缓冲数据可支持的播放时长。

<a id="callback_imediaplayersourceobserver_onplaybufferupdated__prototype"></a>

```cpp
virtual void onPlayBufferUpdated(int64_t playCachedBuffer) = 0;
```

<a id="callback_imediaplayersourceobserver_onplaybufferupdated__detailed_desc"></a>

当播放在线媒体资源时，SDK 每两秒触发一次该回调，用于报告当前缓冲数据可支持的播放时长。

- 当缓冲数据可支持的播放时长小于阈值（默认值为 0）时，SDK 返回 `PLAYER_EVENT_BUFFER_LOW`（6）。
- 当缓冲数据可支持的播放时长大于阈值（默认值为 0）时，SDK 返回 `PLAYER_EVENT_BUFFER_RECOVER`（7）。

<a id="callback_imediaplayersourceobserver_onplaybufferupdated__timing"></a>

### 触发时机 [#触发时机-1]

播放在线媒体资源时，SDK 每两秒触发一次该回调。

<a id="callback_imediaplayersourceobserver_onplaybufferupdated__parameters"></a>

### 参数 [#参数-10]

<ParameterList>
<a id="playcachedbuffer"></a>
<Parameter name="playCachedBuffer">

缓冲数据可支持的播放时长，单位为毫秒。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-10]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onplayerevent"></a>

<a id="ariaid-title13"></a>

## onPlayerEvent [#onplayerevent]

播放器事件回调。

<a id="callback_imediaplayersourceobserver_onplayerevent__prototype"></a>

```cpp
virtual void onPlayerEvent(media::base::MEDIA_PLAYER_EVENT eventCode, int64_t elapsedTime, const char* message) = 0;
```

<a id="callback_imediaplayersourceobserver_onplayerevent__detailed_desc"></a>

调用 [seek](/zh-CN/api-reference/rtc/cpp-all-platforms/play/mediaplayer/mediaplayer-control#api_imediaplayer_seek) 方法后，SDK 会触发该回调报告 [seek](/zh-CN/api-reference/rtc/cpp-all-platforms/play/mediaplayer/mediaplayer-control#api_imediaplayer_seek) 操作的结果。

<a id="callback_imediaplayersourceobserver_onplayerevent__parameters"></a>

### 参数 [#参数-11]

<ParameterList>
<a id="eventcode"></a>
<Parameter name="eventCode">

播放器事件，详见 [MEDIA_PLAYER_EVENT](/zh-CN/api-reference/rtc/cpp-all-platforms/enum-mediaplayerevent)。

</Parameter>
<a id="elapsedtime"></a>
<Parameter name="elapsedTime">

事件发生的时间，单位为毫秒。

</Parameter>
<a id="message"></a>
<Parameter name="message">

事件的相关信息。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-11]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onplayerinfoupdated"></a>

<a id="ariaid-title14"></a>

## onPlayerInfoUpdated [1/2] [#onplayerinfoupdated-12]

`onPlayerInfoUpdated` 回调：当媒体播放器信息发生变化时触发。

<a id="callback_imediaplayersourceobserver_onplayerinfoupdated__prototype"></a>

```cpp
virtual void onPlayerInfoUpdated(const media::base::PlayerUpdatedInfo& info) = 0;
```

<a id="callback_imediaplayersourceobserver_onplayerinfoupdated__detailed_desc"></a>

你可以通过该回调获取媒体播放器信息的变化，用于故障排查。

<a id="callback_imediaplayersourceobserver_onplayerinfoupdated__parameters"></a>

### 参数 [#参数-12]

<ParameterList>
<a id="info"></a>
<Parameter name="info">

媒体播放器相关信息。详见 [PlayerUpdatedInfo](/zh-CN/api-reference/rtc/cpp-all-platforms/class-playerupdatedinfo)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-12]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onplayersourcestatechanged"></a>

<a id="ariaid-title15"></a>

## onPlayerSourceStateChanged [#onplayersourcestatechanged]

播放状态变化回调。

<a id="callback_imediaplayersourceobserver_onplayersourcestatechanged__prototype"></a>

```cpp
virtual void onPlayerSourceStateChanged(media::base::MEDIA_PLAYER_STATE state, media::base::MEDIA_PLAYER_REASON reason) = 0;
```

<a id="callback_imediaplayersourceobserver_onplayersourcestatechanged__detailed_desc"></a>

当媒体播放器状态发生变化时，SDK 会触发该回调报告当前播放状态。

<a id="callback_imediaplayersourceobserver_onplayersourcestatechanged__parameters"></a>

### 参数 [#参数-13]

<ParameterList>
<a id="state"></a>
<Parameter name="state">

播放状态。详见 [MEDIA_PLAYER_STATE](/zh-CN/api-reference/rtc/cpp-all-platforms/enum-mediaplayerstate)。

</Parameter>
<a id="reason"></a>
<Parameter name="reason">

播放状态变化的原因。详见 [MEDIA_PLAYER_REASON](/zh-CN/api-reference/rtc/cpp-all-platforms/enum-mediaplayerreason)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-13]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onplayersrcinfochanged"></a>

<a id="ariaid-title16"></a>

## onPlayerSrcInfoChanged [#onplayersrcinfochanged]

媒体资源视频码率发生变化时触发的回调。

<a id="callback_imediaplayersourceobserver_onplayersrcinfochanged__prototype"></a>

```cpp
virtual void onPlayerSrcInfoChanged(const media::base::SrcInfo& from, const media::base::SrcInfo& to) = 0;
```

<a id="callback_imediaplayersourceobserver_onplayersrcinfochanged__detailed_desc"></a>

<a id="callback_imediaplayersourceobserver_onplayersrcinfochanged__parameters"></a>

### 参数 [#参数-14]

<ParameterList>
<a id="from"></a>
<Parameter name="from">

正在播放的媒体资源的视频码率信息。详见 [SrcInfo](/zh-CN/api-reference/rtc/cpp-all-platforms/class-srcinfo)。

</Parameter>
<a id="to"></a>
<Parameter name="to">

变更后的视频码率信息。详见 [SrcInfo](/zh-CN/api-reference/rtc/cpp-all-platforms/class-srcinfo)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-14]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onpositionchanged"></a>

<a id="ariaid-title17"></a>

## onPositionChanged [#onpositionchanged]

播放进度发生变化回调。

<a id="callback_imediaplayersourceobserver_onpositionchanged__prototype"></a>

```cpp
virtual void onPositionChanged(int64_t positionMs, int64_t timestampMs) = 0;
```

<a id="callback_imediaplayersourceobserver_onpositionchanged__detailed_desc"></a>

该回调在播放媒体文件时每两秒触发一次，用于报告当前播放进度。

<a id="callback_imediaplayersourceobserver_onpositionchanged__parameters"></a>

### 参数 [#参数-15]

<ParameterList>
<a id="positionms"></a>
<Parameter name="positionMs">

媒体文件的播放位置，单位为毫秒。

</Parameter>
<a id="timestampms"></a>
<Parameter name="timestampMs">

当前播放进度对应的 NTP 时间戳，单位为毫秒。

:::note
注： 该参数仅在频道内生效。
:::

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-15]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayersourceobserver_onpreloadevent"></a>

<a id="ariaid-title18"></a>

## onPreloadEvent [#onpreloadevent]

预加载媒体资源事件回调。

<a id="callback_imediaplayersourceobserver_onpreloadevent__prototype"></a>

```cpp
virtual void onPreloadEvent(const char* src, media::base::PLAYER_PRELOAD_EVENT event) = 0;
```

<a id="callback_imediaplayersourceobserver_onpreloadevent__detailed_desc"></a>

<a id="callback_imediaplayersourceobserver_onpreloadevent__parameters"></a>

### 参数 [#参数-16]

<ParameterList>
<a id="src"></a>
<Parameter name="src">

媒体资源的 URL。

</Parameter>
<a id="event"></a>
<Parameter name="event">

预加载媒体资源时触发的事件，详见 [PLAYER_PRELOAD_EVENT](/zh-CN/api-reference/rtc/cpp-all-platforms/enum-playerpreloadevent)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-16]

- [IMediaPlayerSourceObserver](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayersourceobserver)

<a id="callback_imediaplayercustomdataprovider_onreaddata"></a>

<a id="ariaid-title19"></a>

## onReadData [#onreaddata]

SDK 读取媒体资源数据时触发的回调。

<a id="callback_imediaplayercustomdataprovider_onreaddata__prototype"></a>

```cpp
virtual int onReadData(unsigned char *buffer, int bufferSize) = 0;
```

<a id="callback_imediaplayercustomdataprovider_onreaddata__detailed_desc"></a>

当你调用 [openWithMediaSource](/zh-CN/api-reference/rtc/cpp-all-platforms/play/mediaplayer/mediaplayer-open#api_imediaplayer_openwithmediasource) 方法打开媒体资源时，SDK 会触发该回调，并请求你传入媒体资源数据的缓冲区。

<a id="callback_imediaplayercustomdataprovider_onreaddata__parameters"></a>

### 参数 [#参数-17]

<ParameterList>
<a id="buffer"></a>
<Parameter name="buffer">

输出参数，表示数据缓冲区（字节）。你需要将 SDK 请求的 `bufferSize` 大小的数据写入该缓冲区。

</Parameter>
<a id="buffersize"></a>
<Parameter name="bufferSize">

数据缓冲区的长度（字节）。

</Parameter>
</ParameterList>

<a id="callback_imediaplayercustomdataprovider_onreaddata__return_values"></a>

### 返回值 [#返回值-7]

- 如果数据读取成功，返回实际读取的数据长度（字节）。
- 如果读取失败，返回 0。

### 所属接口类 [#所属接口类-17]

- [IMediaPlayerCustomDataProvider](/zh-CN/api-reference/rtc/cpp-all-platforms/rtc-interface-class#class_imediaplayercustomdataprovider)
