1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit). 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Use of this source code is governed by MIT license that can be found in the 7*4882a593Smuzhiyun * LICENSE file in the root of the source tree. All contributing project authors 8*4882a593Smuzhiyun * may be found in the AUTHORS file in the root of the source tree. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef MK_PLAYER_H_ 12*4882a593Smuzhiyun #define MK_PLAYER_H_ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include "mk_common.h" 15*4882a593Smuzhiyun #include "mk_frame.h" 16*4882a593Smuzhiyun #include "mk_track.h" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #ifdef __cplusplus 19*4882a593Smuzhiyun extern "C" { 20*4882a593Smuzhiyun #endif 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun typedef void* mk_player; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /** 25*4882a593Smuzhiyun * 播放结果或播放中断事件的回调 26*4882a593Smuzhiyun * @param user_data 用户数据指针 27*4882a593Smuzhiyun * @param err_code 错误代码,0为成功 28*4882a593Smuzhiyun * @param err_msg 错误提示 29*4882a593Smuzhiyun * @param tracks track列表 30*4882a593Smuzhiyun * @param track_count track个数 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun typedef void(API_CALL *on_mk_play_event)(void *user_data, int err_code, const char *err_msg, mk_track tracks[], 33*4882a593Smuzhiyun int track_count); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /** 36*4882a593Smuzhiyun * 创建一个播放器,支持rtmp[s]/rtsp[s] 37*4882a593Smuzhiyun * @return 播放器指针 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun API_EXPORT mk_player API_CALL mk_player_create(); 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /** 42*4882a593Smuzhiyun * 销毁播放器 43*4882a593Smuzhiyun * @param ctx 播放器指针 44*4882a593Smuzhiyun */ 45*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_release(mk_player ctx); 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /** 48*4882a593Smuzhiyun * 设置播放器配置选项 49*4882a593Smuzhiyun * @param ctx 播放器指针 50*4882a593Smuzhiyun * @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms/wait_track_ready 51*4882a593Smuzhiyun * @param val 配置项值,如果是整形,需要转换成统一转换成string 52*4882a593Smuzhiyun */ 53*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_set_option(mk_player ctx, const char *key, const char *val); 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /** 56*4882a593Smuzhiyun * 开始播放url 57*4882a593Smuzhiyun * @param ctx 播放器指针 58*4882a593Smuzhiyun * @param url rtsp[s]/rtmp[s] url 59*4882a593Smuzhiyun */ 60*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_play(mk_player ctx, const char *url); 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /** 63*4882a593Smuzhiyun * 暂停或恢复播放,仅对点播有用 64*4882a593Smuzhiyun * @param ctx 播放器指针 65*4882a593Smuzhiyun * @param pause 1:暂停播放,0:恢复播放 66*4882a593Smuzhiyun */ 67*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_pause(mk_player ctx, int pause); 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /** 70*4882a593Smuzhiyun * 倍数播放,仅对点播有用 71*4882a593Smuzhiyun * @param ctx 播放器指针 72*4882a593Smuzhiyun * @param speed 0.5 1.0 2.0 73*4882a593Smuzhiyun */ 74*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_speed(mk_player ctx, float speed); 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /** 77*4882a593Smuzhiyun * 设置点播进度条 78*4882a593Smuzhiyun * @param ctx 对象指针 79*4882a593Smuzhiyun * @param progress 取值范围未 0.0~1.0 80*4882a593Smuzhiyun */ 81*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_seekto(mk_player ctx, float progress); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /** 84*4882a593Smuzhiyun * 设置点播进度条 85*4882a593Smuzhiyun * @param ctx 对象指针 86*4882a593Smuzhiyun * @param seek_pos 取值范围 相对于开始时间增量 单位秒 87*4882a593Smuzhiyun */ 88*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_seekto_pos(mk_player ctx, int seek_pos); 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /** 91*4882a593Smuzhiyun * 设置播放器开启播放结果回调函数 92*4882a593Smuzhiyun * @param ctx 播放器指针 93*4882a593Smuzhiyun * @param cb 回调函数指针,设置null立即取消回调 94*4882a593Smuzhiyun * @param user_data 用户数据指针 95*4882a593Smuzhiyun */ 96*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_set_on_result(mk_player ctx, on_mk_play_event cb, void *user_data); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /** 99*4882a593Smuzhiyun * 设置播放被异常中断的回调 100*4882a593Smuzhiyun * @param ctx 播放器指针 101*4882a593Smuzhiyun * @param cb 回调函数指针,设置null立即取消回调 102*4882a593Smuzhiyun * @param user_data 用户数据指针 103*4882a593Smuzhiyun */ 104*4882a593Smuzhiyun API_EXPORT void API_CALL mk_player_set_on_shutdown(mk_player ctx, on_mk_play_event cb, void *user_data); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun ///////////////////////////获取音视频相关信息接口在播放成功回调触发后才有效/////////////////////////////// 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun /** 109*4882a593Smuzhiyun * 获取点播节目时长,如果是直播返回0,否则返回秒数 110*4882a593Smuzhiyun */ 111*4882a593Smuzhiyun API_EXPORT float API_CALL mk_player_duration(mk_player ctx); 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /** 114*4882a593Smuzhiyun * 获取点播播放进度,取值范围 0.0~1.0 115*4882a593Smuzhiyun */ 116*4882a593Smuzhiyun API_EXPORT float API_CALL mk_player_progress(mk_player ctx); 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /** 119*4882a593Smuzhiyun * 获取点播播放进度位置,取值范围 相对于开始时间增量 单位秒 120*4882a593Smuzhiyun */ 121*4882a593Smuzhiyun API_EXPORT int API_CALL mk_player_progress_pos(mk_player ctx); 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun /** 124*4882a593Smuzhiyun * 获取丢包率,rtsp时有效 125*4882a593Smuzhiyun * @param ctx 对象指针 126*4882a593Smuzhiyun * @param track_type 0:视频,1:音频 127*4882a593Smuzhiyun */ 128*4882a593Smuzhiyun API_EXPORT float API_CALL mk_player_loss_rate(mk_player ctx, int track_type); 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #ifdef __cplusplus 131*4882a593Smuzhiyun } 132*4882a593Smuzhiyun #endif 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun #endif /* MK_PLAYER_H_ */ 135