ijkplayer是一款优秀的跨平台播放器,核心代码在ff_ffplay.c,然后ijkplayer.c对ff_ffplay.c进行封装,具备丰富而完整的API。接下来要介绍的API基于ijkplayer.c,除了介绍ijkplayer的API,另外有IJKMeta、property、option。
目录
23、ijkmp_get_playable_duration
一、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
获取当前缓冲时长。