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