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

    获取当前缓冲时长。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: android ijkplayer是一款开源的Android音视频播放器库。它是基于FFmpeg库的封装,提供了一套简单易用的API,使开发者可以方便地在Android平台上实现音视频播放的功能。 在Android平台上,原生的MediaPlayer虽然功能较为基础,但如果要实现一些高级的音视频播放功能,需要编写复杂的代码。而ijkplayer通过封装了FFmpeg库,可以直接支持各种视频格式,同时提供了丰富的播放控制接口和音视频处理功能,轻松满足开发者的需求。 使用ijkplayer,开发者可以实现视频播放器的功能,包括播放、暂停、停止、快进、快退等控制操作,同时还可以实现视频缓冲、音频解码、视频解码等功能。此外,ijkplayer还支持网络流媒体的播放,可以通过URL进行视频播放,并支持自定义视频渲染器,实现自定义的播放界面。 ijkplayer在开源社区中也非常活跃,拥有庞大的开发者群体和丰富的文档资源。开发者可以通过阅读官方文档、查看源码和参与社区讨论,解决使用过程中遇到的问题。 总之,android ijkplayer是一款功能丰富、易用性高的Android音视频播放器库,开发者可以借助它实现各种音视频播放功能,提升用户体验,满足不同场景的需求。 ### 回答2: Android IJKPlayer是一个基于FFmpeg开源项目的跨平台音视频播放器。它是由Bilibili开发的,旨在提供更稳定、高效的音视频播放体验。 IJKPlayer具有以下几个特点: 1. 多格式支持:IJKPlayer可以播放多种音视频格式,包括但不限于mkv、flv、mp4、avi等常见格式,且兼容性较好。 2. 跨平台支持:IJKPlayer不仅可以在安卓平台上使用,还支持在其他主流平台上运行,如iOS、Windows等,给开发者提供了更多的使用选择。 3. 硬解支持:IJKPlayer支持硬解码,可以利用设备的硬件能力来加速音视频的解码和播放,提升播放效率和性能。 4. 自定义能力:IJKPlayer可以根据用户需求进行自定义设置,比如调整播放器的画面尺寸、显示字幕、切换音轨等等,给用户更好的播放体验。 5. 延迟控制:IJKPlayer提供了低延迟播放功能,特别适用于直播等实时性要求较高的场景。 6. 网络支持:IJKPlayer能够通过网络进行音视频的传输和播放,支持直播流媒体协议,如RTSP、RTMP等,方便开发者进行网络音视频应用开发。 总之,Android IJKPlayer是一个强大而且易于使用的音视频播放器,具备良好的兼容性、高效的解码能力和丰富的自定义能力,可以满足开发者对于音视频播放的各种需求,为用户提供更好的播放体验。 ### 回答3: Android IjkPlayer是一款开源的、跨平台的视频播放器框架。它基于FFmpeg和OpenSL ES技术,能够解码和播放各种音视频格式。IjkPlayer具有以下几个优点: 首先,IjkPlayer具有较好的兼容性。它支持常见的视频格式,如MP4、AVI、FLV等,同时也支持常见的音频格式,如MP3、AAC等。这使得开发者可以在Android平台上播放各种类型的音视频,无需关心格式的兼容性问题。 其次,IjkPlayer具有较好的性能。它采用了硬解码和软解码相结合的方式,可以根据设备的硬件能力灵活选择解码方式,以提供更好的播放性能。同时,IjkPlayer还支持视频缓存和断点续播功能,可以在网络环境不稳定的情况下提供更好的用户体验。 另外,IjkPlayer还具有丰富的功能扩展性。它提供了丰富的API接口,开发者可以根据自己的需求进行二次开发。例如,可以通过扩展支持更多的视频格式,或者添加自定义的播放控制功能。 总的来说,Android IjkPlayer是一款功能强大、性能出色的视频播放器框架。它为开发者提供了丰富的功能和灵活的扩展性,能够满足各种类型的音视频播放需求。无论是开发在线直播应用、本地视频播放功能还是自定义的音视频播放需求,都可以通过Android IjkPlayer来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐福记456

您的鼓励和肯定是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值