ijkplayer的API详细介绍

ijkplayer是一款优秀的跨平台播放器,核心代码在ff_ffplay.c,然后ijkplayer.c对ff_ffplay.c进行封装,具备丰富而完整的API。接下来要介绍的API基于ijkplayer.c,除了介绍ijkplayer的API,另外有IJKMeta、property、option。

目录

一、ijkplayer常见API

1、ijkmp_create

2、ijkmp_global_init

3、ijkmp_global_set_log_report

4、ijkmp_global_set_log_level

5、ijkmp_version

6、ijkmp_set_option

7、ijkmp_set_data_source

8、ijkmp_prepare_async

9、ijkmp_start

10、ijkmp_get_video_codec_info

11、ijkmp_get_audio_codec_info

12、ijkmp_set_playback_rate

13、ijkmp_set_playback_volume

14、ijkmp_set_stream_selected

15、ijkmp_set_property_float

16、ijkmp_set_property_int64

17、ijkmp_get_meta_l

18、ijkmp_seek_to

19、ijkmp_get_state

20、ijkmp_is_playing

21、ijkmp_get_current_position

22、ijkmp_get_duration

23、ijkmp_get_playable_duration

24、ijkmp_set_loop

25、ijkmp_get_msg

26、ijkmp_pause

27、ijkmp_stop

28、ijkmp_shutdown

二、option

1、player_option

2、format_option

3、codec_option

三、IJKMeta

四、property

1、property_float

2、property_int64


一、ijkplayer常见API

1、ijkmp_create

用于创建播放器,返回IjkMediaPlayer

2、ijkmp_global_init

用于全局初始化,主要是注册codec、format与protocol(包括ijk自定义部分),初始化网络组件,设置log消息与事件回调。

3、ijkmp_global_set_log_report

用于设置log报告。

4、ijkmp_global_set_log_level

用于设置log等级。

5、ijkmp_version

用于获取播放器版本号。

6、ijkmp_set_option

用于设置option选项。下面会详细介绍option。

7、ijkmp_set_data_source

用于设置数据源,包括本地与网络url。

8、ijkmp_prepare_async

用于异步初始化播放器,初始化完成回调on_prepared.

9、ijkmp_start

开始播放,回调on_prepared并且设置自动播放时触发,或者上层调用start。

10、ijkmp_get_video_codec_info

用于获取视频解码器信息,即视频解码器类型,比如h264。

11、ijkmp_get_audio_codec_info

用于获取音频解码器信息,即音频解码器类型,比如aac。

12、ijkmp_set_playback_rate

用于设置播放速率。

13、ijkmp_set_playback_volume

用于设置播放音量。

14、ijkmp_set_stream_selected

用于选择媒体流,包括video、audio、subtitle,也就是用来切换音轨、字幕。

15、ijkmp_set_property_float

用于设置float类型的property属性,与之对应的是ijkmp_get_property_float获取属性。

16、ijkmp_set_property_int64

用于设置int64类型的property属性。与之对应的是ijkmp_get_property_int64获取属性。

17、ijkmp_get_meta_l

用于获取IJKMeta,主要是媒体元数据。下面会详细介绍。

18、ijkmp_seek_to

用于拖动进度条实现快进快退,时间单位是ms。

19、ijkmp_get_state

用于获取播放器状态,包括idle、initialized、async_preparing、prepared、started、paused、stopped、error、completed、end等状态。

20、ijkmp_is_playing

用于判断播放器是否处于播放状态。

21、ijkmp_get_current_position

用于获取当前播放位置,时间单位ms。

22、ijkmp_get_duration

用于获取播放总时长,时间单位ms。

23、ijkmp_get_playable_duration

用于获取可播放的时长,即已经缓冲的时长。

24、ijkmp_set_loop

用于设置循环播放。

25、ijkmp_get_msg

用于获取消息事件,包括MSG_PREPARED、MSG_COMPLETED、MSG_SEEK_COMPLETED、MSG_REQ_START、MSG_REQ_PAUSE、MSG_REQ_SEEK等。

26、ijkmp_pause

用于暂停播放,调用ijkmp_start恢复播放。

27、ijkmp_stop

用于停止播放,调用ijkmp_prepare_async重新播放。

28、ijkmp_shutdown

用于销毁播放器,回收资源。

二、option

option用于设置特定参数,包括:player_option、format_option、codec_option等。详细参数请查看ff_ffplay_options.h。下面进行分类介绍:

1、player_option

player-opts: an                 // disable audio

player-opts: vn                 // disable video

player-opts: volume             // set startup volume 0=min 100=max

player-opts: loop               // set number of times the playback shall be looped

player-opts: soundtouch         // SoundTouch: enable

player-opts: opensles           // OpenSL ES: enable

player-opts: video-pictq-size   // set video picture_queue size

player-opts: max-fps            // drop frames in video whose fps is greater than max-fps

player-opts: framedrop          // drop frames when cpu is too slow

player-opts: videotoolbox       // VideoToolbox: enable

player-opts: mediacodec         // MediaCodec: enable H264

player-opts: start-on-prepared  // whether need preload before start playing

player-opts: sync-av-start      // synchronise a/v start time

2、format_option

format-opts: user-agent         // user-agent

format-opts: auto_convert       // auto rotate when screen orientation has changed

format-opts: timeout            // connection timeout

format-opts: reconnect          // reconnect when timeout

format-opts: safe               // safe to transport

format-opts: analyzemaxduration // max analyzed duration

format-opts: probesize          // specific the size when probing

format-opts: rtsp_transport     // tcp or udp, default udp

format-opts: infbuf             // don't limit the input buffer size (useful with realtime streams)

format-opts: packet-buffering   // pause output until enough packets have been read

format-opts: max-buffer-size    // max buffer size should be pre-read

3、codec_option

codec-opts: skip_frame       // need to skip frame or not, when running slow

codec-opts: skip_loop_filter // need to loop filter or not

三、IJKMeta

IJKMeta是个结构体,主要是用AVDictionary来存储多媒体元数据信息。结构体如下:

struct IjkMediaMeta {

  SDL_mutex *mutex;

  AVDictionary *dict;

  size_t children_count;

  size_t children_capacity;

  IjkMediaMeta **children;

};

多媒体信息包括:媒体通用信息、流通用信息、视频流、音频流。详细参数如下:

// media meta

#define IJKM_KEY_FORMAT  "format"

#define IJKM_KEY_DURATION_US  "duration_us"

#define IJKM_KEY_START_US  "start_us"

#define IJKM_KEY_BITRATE  "bitrate"

#define IJKM_KEY_VIDEO_STREAM  "video"

#define IJKM_KEY_AUDIO_STREAM  "audio"

#define IJKM_KEY_TIMEDTEXT_STREAM "timedtext"

// stream meta

#define IJKM_KEY_LANGUAGE  "language"

#define IJKM_KEY_CODEC_NAME  "codec_name"

#define IJKM_KEY_CODEC_PROFILE  "codec_profile"

#define IJKM_KEY_CODEC_LEVEL  "codec_level"

#define IJKM_KEY_CODEC_LONG_NAME  "codec_long_name"

#define IJKM_KEY_CODEC_PIXEL_FORMAT "codec_pixel_format"

#define IJKM_KEY_CODEC_PROFILE_ID  "codec_profile_id"

// stream: video

#define IJKM_KEY_WIDTH  "width"

#define IJKM_KEY_HEIGHT  "height"

#define IJKM_KEY_FPS_NUM  "fps_num"

#define IJKM_KEY_FPS_DEN  "fps_den"

#define IJKM_KEY_TBR_NUM  "tbr_num"

#define IJKM_KEY_TBR_DEN  "tbr_den"

#define IJKM_KEY_SAR_NUM  "sar_num"

#define IJKM_KEY_SAR_DEN  "sar_den"

// stream: audio

#define IJKM_KEY_SAMPLE_RATE  "sample_rate"

#define IJKM_KEY_CHANNEL_LAYOUT "channel_layout"

四、property

property属性分为float与int64两种类型。

1、property_float

(1) video_decode_frame_per_second

    统计每秒解码帧数,即解码帧率。(read only)

(2) video_output_frame_per_second

    统计每秒渲染帧数,即播放帧率。(read only)

(3) playback_rate

    设置/获取播放速率。

(4) playback_volume

    设置/获取播放音量。

2、property_int64

(1) selected_video_stream

    获取当前选中的视频流。

(2) selected_audio_stream

    获取当前选中的音频流。

(3) selected_subtitle_stream

    获取当前选中的字幕流。

(4) cache_duration

    获取当前缓冲时长。

おすすめ

転載: blog.csdn.net/u011686167/article/details/121317933
おすすめ