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 ZLMEDIAKIT_MK_TRACK_H 12*4882a593Smuzhiyun #define ZLMEDIAKIT_MK_TRACK_H 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include "mk_common.h" 15*4882a593Smuzhiyun #include "mk_frame.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #ifdef __cplusplus 18*4882a593Smuzhiyun extern "C" { 19*4882a593Smuzhiyun #endif 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun //音视频轨道 22*4882a593Smuzhiyun typedef void* mk_track; 23*4882a593Smuzhiyun //输出frame回调 24*4882a593Smuzhiyun typedef void(API_CALL *on_mk_frame_out)(void *user_data, mk_frame frame); 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun //track创建参数 27*4882a593Smuzhiyun typedef union { 28*4882a593Smuzhiyun struct { 29*4882a593Smuzhiyun int width; 30*4882a593Smuzhiyun int height; 31*4882a593Smuzhiyun int fps; 32*4882a593Smuzhiyun } video; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct { 35*4882a593Smuzhiyun int channels; 36*4882a593Smuzhiyun int sample_rate; 37*4882a593Smuzhiyun } audio; 38*4882a593Smuzhiyun } codec_args; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /** 41*4882a593Smuzhiyun * 创建track对象引用 42*4882a593Smuzhiyun * @param codec_id 请参考MKCodecXXX 常量定义 43*4882a593Smuzhiyun * @param args 视频或音频参数 44*4882a593Smuzhiyun * @return track对象引用 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun API_EXPORT mk_track API_CALL mk_track_create(int codec_id, codec_args *args); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /** 49*4882a593Smuzhiyun * 减引用track对象 50*4882a593Smuzhiyun * @param track track对象 51*4882a593Smuzhiyun */ 52*4882a593Smuzhiyun API_EXPORT void API_CALL mk_track_unref(mk_track track); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /** 55*4882a593Smuzhiyun * 引用track对象 56*4882a593Smuzhiyun * @param track track对象 57*4882a593Smuzhiyun * @return 新的track引用对象 58*4882a593Smuzhiyun */ 59*4882a593Smuzhiyun API_EXPORT mk_track API_CALL mk_track_ref(mk_track track); 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /** 62*4882a593Smuzhiyun * 获取track 编码codec类型,请参考MKCodecXXX定义 63*4882a593Smuzhiyun */ 64*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_codec_id(mk_track track); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /** 67*4882a593Smuzhiyun * 获取编码codec名称 68*4882a593Smuzhiyun */ 69*4882a593Smuzhiyun API_EXPORT const char* API_CALL mk_track_codec_name(mk_track track); 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /** 72*4882a593Smuzhiyun * 获取比特率信息 73*4882a593Smuzhiyun */ 74*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_bit_rate(mk_track track); 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /** 77*4882a593Smuzhiyun * 监听frame输出事件 78*4882a593Smuzhiyun * @param track track对象 79*4882a593Smuzhiyun * @param cb frame输出回调 80*4882a593Smuzhiyun * @param user_data frame输出回调用户指针参数 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun API_EXPORT void *API_CALL mk_track_add_delegate(mk_track track, on_mk_frame_out cb, void *user_data); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /** 85*4882a593Smuzhiyun * 取消frame输出事件监听 86*4882a593Smuzhiyun * @param track track对象 87*4882a593Smuzhiyun * @param tag mk_track_add_delegate返回值 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun API_EXPORT void API_CALL mk_track_del_delegate(mk_track track, void *tag); 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /** 92*4882a593Smuzhiyun * 输入frame到track,通常你不需要调用此api 93*4882a593Smuzhiyun */ 94*4882a593Smuzhiyun API_EXPORT void API_CALL mk_track_input_frame(mk_track track, mk_frame frame); 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /** 97*4882a593Smuzhiyun * track是否为视频 98*4882a593Smuzhiyun */ 99*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_is_video(mk_track track); 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /** 102*4882a593Smuzhiyun * 获取视频宽度 103*4882a593Smuzhiyun */ 104*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_video_width(mk_track track); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /** 107*4882a593Smuzhiyun * 获取视频高度 108*4882a593Smuzhiyun */ 109*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_video_height(mk_track track); 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /** 112*4882a593Smuzhiyun * 获取视频帧率 113*4882a593Smuzhiyun */ 114*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_video_fps(mk_track track); 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun /** 117*4882a593Smuzhiyun * 获取音频采样率 118*4882a593Smuzhiyun */ 119*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_audio_sample_rate(mk_track track); 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /** 122*4882a593Smuzhiyun * 获取音频通道数 123*4882a593Smuzhiyun */ 124*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_audio_channel(mk_track track); 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun /** 127*4882a593Smuzhiyun * 获取音频位数,一般为16bit 128*4882a593Smuzhiyun */ 129*4882a593Smuzhiyun API_EXPORT int API_CALL mk_track_audio_sample_bit(mk_track track); 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #ifdef __cplusplus 132*4882a593Smuzhiyun } 133*4882a593Smuzhiyun #endif 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun #endif //ZLMEDIAKIT_MK_TRACK_H