mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-13 03:31:45 +08:00
全面更新整理c sdk
This commit is contained in:
@@ -14,24 +14,21 @@
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
||||
#ifndef MediaKitApi_STATIC
|
||||
#if defined(MediaKitApi_EXPORTS)
|
||||
#define API_EXPORT __declspec(dllexport)
|
||||
#else
|
||||
#define API_EXPORT __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#define API_CALL __cdecl
|
||||
#if defined(_WIN32) && defined(_MSC_VER)
|
||||
# ifndef MediaKitApi_STATIC
|
||||
# if defined(MediaKitApi_EXPORTS)
|
||||
# define API_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
# define API_EXPORT __declspec(dllimport)
|
||||
# endif
|
||||
# define API_CALL __cdecl
|
||||
# else
|
||||
# define API_EXPORT
|
||||
# define API_CALL
|
||||
# endif
|
||||
#else
|
||||
#define API_EXPORT
|
||||
#define API_CALL
|
||||
#endif
|
||||
|
||||
#else
|
||||
#define API_EXPORT
|
||||
#define API_CALL
|
||||
# define API_EXPORT
|
||||
# define API_CALL
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
123
api/include/mk_frame.h
Normal file
123
api/include/mk_frame.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||
*
|
||||
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||
*
|
||||
* Use of this source code is governed by MIT license that can be found in the
|
||||
* LICENSE file in the root of the source tree. All contributing project authors
|
||||
* may be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef ZLMEDIAKIT_MK_FRAME_H
|
||||
#define ZLMEDIAKIT_MK_FRAME_H
|
||||
|
||||
#include "mk_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//是否为关键帧
|
||||
#define MK_FRAME_FLAG_IS_KEY (1 << 0)
|
||||
//是否为配置帧(sps/pps/vps等)
|
||||
#define MK_FRAME_FLAG_IS_CONFIG (1 << 1)
|
||||
//是否可丢弃的帧(sei/aud)
|
||||
#define MK_FRAME_FLAG_DROP_ABLE (1 << 2)
|
||||
//是否不可单独解码的帧(多slice的非vcl帧)
|
||||
#define MK_FRAME_FLAG_NOT_DECODE_ABLE (1 << 3)
|
||||
|
||||
//codec id常量定义
|
||||
API_EXPORT extern const int MKCodecH264;
|
||||
API_EXPORT extern const int MKCodecH265;
|
||||
API_EXPORT extern const int MKCodecAAC;
|
||||
API_EXPORT extern const int MKCodecG711A;
|
||||
API_EXPORT extern const int MKCodecG711U;
|
||||
API_EXPORT extern const int MKCodecOpus;
|
||||
API_EXPORT extern const int MKCodecL16;
|
||||
API_EXPORT extern const int MKCodecVP8;
|
||||
API_EXPORT extern const int MKCodecVP9;
|
||||
API_EXPORT extern const int MKCodecAV1;
|
||||
API_EXPORT extern const int MKCodecJPEG;
|
||||
|
||||
typedef void *mk_frame;
|
||||
|
||||
// 用户自定义free回调函数
|
||||
typedef void(API_CALL *on_mk_frame_data_release)(void *user_data, char *ptr);
|
||||
|
||||
/**
|
||||
* 创建frame对象,并返回其引用
|
||||
* @param codec_id 编解码类型,请参考MKCodecXXX定义
|
||||
* @param dts 解码时间戳,单位毫秒
|
||||
* @param pts 显示时间戳,单位毫秒
|
||||
* @param data 单帧数据
|
||||
* @param size 单帧数据长度
|
||||
* @param cb data指针free释放回调, 如果为空,内部会拷贝数据
|
||||
* @param user_data data指针free释放回调用户指针
|
||||
* @return frame对象引用
|
||||
*/
|
||||
API_EXPORT mk_frame API_CALL mk_frame_create(int codec_id, uint32_t dts, uint32_t pts, const char *data, size_t size,
|
||||
on_mk_frame_data_release cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 减引用frame对象
|
||||
* @param frame 帧对象引用
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_frame_unref(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 引用frame对象
|
||||
* @param frame 被引用的frame对象
|
||||
* @return 新的对象引用
|
||||
*/
|
||||
API_EXPORT mk_frame API_CALL mk_frame_ref(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取frame 编码codec类型,请参考MKCodecXXX定义
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_frame_codec_id(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取帧编码codec名称
|
||||
*/
|
||||
API_EXPORT const char* API_CALL mk_frame_codec_name(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 帧是否为视频
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_frame_is_video(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取帧数据指针
|
||||
*/
|
||||
API_EXPORT const char* API_CALL mk_frame_get_data(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取帧数据指针长度
|
||||
*/
|
||||
API_EXPORT size_t API_CALL mk_frame_get_data_size(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 返回帧数据前缀长度,譬如H264/H265前缀一般是0x00 00 00 01,那么本函数返回4
|
||||
*/
|
||||
API_EXPORT size_t API_CALL mk_frame_get_data_prefix_size(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取解码时间戳,单位毫秒
|
||||
*/
|
||||
API_EXPORT uint32_t API_CALL mk_frame_get_dts(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取显示时间戳,单位毫秒
|
||||
*/
|
||||
API_EXPORT uint32_t API_CALL mk_frame_get_pts(mk_frame frame);
|
||||
|
||||
/**
|
||||
* 获取帧flag,请参考 MK_FRAME_FLAG
|
||||
*/
|
||||
API_EXPORT uint32_t API_CALL mk_frame_get_flags(mk_frame frame);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //ZLMEDIAKIT_MK_FRAME_H
|
||||
@@ -12,6 +12,8 @@
|
||||
#define MK_MEDIA_H_
|
||||
|
||||
#include "mk_common.h"
|
||||
#include "mk_track.h"
|
||||
#include "mk_frame.h"
|
||||
#include "mk_events_objects.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -40,18 +42,29 @@ API_EXPORT mk_media API_CALL mk_media_create(const char *vhost, const char *app,
|
||||
API_EXPORT void API_CALL mk_media_release(mk_media ctx);
|
||||
|
||||
/**
|
||||
* 添加视频轨道
|
||||
* 添加音视频track
|
||||
* @param ctx mk_media对象
|
||||
* @param track mk_track对象,音视频轨道
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_media_init_track(mk_media ctx, mk_track track);
|
||||
|
||||
/**
|
||||
* 添加视频轨道,请改用mk_media_init_track方法
|
||||
* @param ctx 对象指针
|
||||
* @param codec_id 0:CodecH264/1:CodecH265
|
||||
* @param width 视频宽度; 在编码时才有效
|
||||
* @param height 视频高度; 在编码时才有效
|
||||
* @param fps 视频fps; 在编码时才有效
|
||||
* @param bit_rate 视频比特率,单位bps; 在编码时才有效
|
||||
* @param width 视频宽度
|
||||
* @param height 视频高度
|
||||
* @param fps 视频fps
|
||||
* @return 1代表成功,0失败
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_media_init_video(mk_media ctx, int codec_id, int width, int height, float fps);
|
||||
API_EXPORT int API_CALL mk_media_init_video(mk_media ctx, int codec_id, int width, int height, float fps, int bit_rate);
|
||||
|
||||
/**
|
||||
* 添加音频轨道
|
||||
* 添加音频轨道,请改用mk_media_init_track方法
|
||||
* @param ctx 对象指针
|
||||
* @param codec_id 2:CodecAAC/3:CodecG711A/4:CodecG711U/5:OPUS
|
||||
* @param channel 通道数
|
||||
@@ -70,7 +83,15 @@ API_EXPORT int API_CALL mk_media_init_audio(mk_media ctx, int codec_id, int samp
|
||||
API_EXPORT void API_CALL mk_media_init_complete(mk_media ctx);
|
||||
|
||||
/**
|
||||
* 输入单帧H264视频,帧起始字节00 00 01,00 00 00 01均可
|
||||
* 输入frame对象
|
||||
* @param ctx mk_media对象
|
||||
* @param frame 帧对象
|
||||
* @return 1代表成功,0失败
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_media_input_frame(mk_media ctx, mk_frame frame);
|
||||
|
||||
/**
|
||||
* 输入单帧H264视频,帧起始字节00 00 01,00 00 00 01均可,请改用mk_media_input_frame方法
|
||||
* @param ctx 对象指针
|
||||
* @param data 单帧H264数据
|
||||
* @param len 单帧H264数据字节数
|
||||
@@ -81,7 +102,7 @@ API_EXPORT void API_CALL mk_media_init_complete(mk_media ctx);
|
||||
API_EXPORT int API_CALL mk_media_input_h264(mk_media ctx, const void *data, int len, uint32_t dts, uint32_t pts);
|
||||
|
||||
/**
|
||||
* 输入单帧H265视频,帧起始字节00 00 01,00 00 00 01均可
|
||||
* 输入单帧H265视频,帧起始字节00 00 01,00 00 00 01均可,请改用mk_media_input_frame方法
|
||||
* @param ctx 对象指针
|
||||
* @param data 单帧H265数据
|
||||
* @param len 单帧H265数据字节数
|
||||
@@ -92,7 +113,16 @@ API_EXPORT int API_CALL mk_media_input_h264(mk_media ctx, const void *data, int
|
||||
API_EXPORT int API_CALL mk_media_input_h265(mk_media ctx, const void *data, int len, uint32_t dts, uint32_t pts);
|
||||
|
||||
/**
|
||||
* 输入单帧AAC音频(单独指定adts头)
|
||||
* 输入YUV视频数据
|
||||
* @param ctx 对象指针
|
||||
* @param yuv yuv420p数据
|
||||
* @param linesize yuv420p linesize
|
||||
* @param cts 视频采集时间戳,单位毫秒
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_media_input_yuv(mk_media ctx, const char *yuv[3], int linesize[3], uint32_t cts);
|
||||
|
||||
/**
|
||||
* 输入单帧AAC音频(单独指定adts头),请改用mk_media_input_frame方法
|
||||
* @param ctx 对象指针
|
||||
* @param data 不包含adts头的单帧AAC数据,adts头7个字节
|
||||
* @param len 单帧AAC数据字节数
|
||||
@@ -113,7 +143,7 @@ API_EXPORT int API_CALL mk_media_input_aac(mk_media ctx, const void *data, int l
|
||||
API_EXPORT int API_CALL mk_media_input_pcm(mk_media ctx, void *data, int len, uint32_t pts);
|
||||
|
||||
/**
|
||||
* 输入单帧OPUS/G711音频帧
|
||||
* 输入单帧OPUS/G711音频帧,请改用mk_media_input_frame方法
|
||||
* @param ctx 对象指针
|
||||
* @param data 单帧音频数据
|
||||
* @param len 单帧音频数据字节数
|
||||
|
||||
@@ -24,5 +24,8 @@
|
||||
#include "mk_thread.h"
|
||||
#include "mk_rtp_server.h"
|
||||
#include "mk_h264_splitter.h"
|
||||
#include "mk_frame.h"
|
||||
#include "mk_track.h"
|
||||
#include "mk_transcode.h"
|
||||
|
||||
#endif /* MK_API_H_ */
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
#define MK_PLAYER_H_
|
||||
|
||||
#include "mk_common.h"
|
||||
#include "mk_frame.h"
|
||||
#include "mk_track.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -24,20 +26,11 @@ typedef void* mk_player;
|
||||
* @param user_data 用户数据指针
|
||||
* @param err_code 错误代码,0为成功
|
||||
* @param err_msg 错误提示
|
||||
* @param tracks track列表
|
||||
* @param track_count track个数
|
||||
*/
|
||||
typedef void(API_CALL *on_mk_play_event)(void *user_data,int err_code,const char *err_msg);
|
||||
|
||||
/**
|
||||
* 收到音视频数据回调
|
||||
* @param user_data 用户数据指针
|
||||
* @param track_type 0:视频,1:音频
|
||||
* @param codec_id 0:H264,1:H265,2:AAC 3.G711A 4.G711U 5.OPUS
|
||||
* @param data 数据指针
|
||||
* @param len 数据长度
|
||||
* @param dts 解码时间戳,单位毫秒
|
||||
* @param pts 显示时间戳,单位毫秒
|
||||
*/
|
||||
typedef void(API_CALL *on_mk_play_data)(void *user_data,int track_type,int codec_id,void *data,size_t len, uint32_t dts,uint32_t pts);
|
||||
typedef void(API_CALL *on_mk_play_event)(void *user_data, int err_code, const char *err_msg, mk_track tracks[],
|
||||
int track_count);
|
||||
|
||||
/**
|
||||
* 创建一个播放器,支持rtmp[s]/rtsp[s]
|
||||
@@ -54,7 +47,7 @@ API_EXPORT void API_CALL mk_player_release(mk_player ctx);
|
||||
/**
|
||||
* 设置播放器配置选项
|
||||
* @param ctx 播放器指针
|
||||
* @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms/max_analysis_ms
|
||||
* @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms/wait_track_ready
|
||||
* @param val 配置项值,如果是整形,需要转换成统一转换成string
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_player_set_option(mk_player ctx, const char *key, const char *val);
|
||||
@@ -110,67 +103,8 @@ API_EXPORT void API_CALL mk_player_set_on_result(mk_player ctx, on_mk_play_event
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_player_set_on_shutdown(mk_player ctx, on_mk_play_event cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 设置音视频数据回调函数
|
||||
* @param ctx 播放器指针
|
||||
* @param cb 回调函数指针,设置null立即取消回调
|
||||
* @param user_data 用户数据指针
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_player_set_on_data(mk_player ctx, on_mk_play_data cb, void *user_data);
|
||||
|
||||
///////////////////////////获取音视频相关信息接口在播放成功回调触发后才有效///////////////////////////////
|
||||
|
||||
/**
|
||||
* 获取视频codec_id -1:不存在 0:H264,1:H265,2:AAC 3.G711A 4.G711U
|
||||
* @param ctx 播放器指针
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_video_codec_id(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取视频codec_id, vendor类型, 私有头数据 codec_id -1:不存在 0:H264,1:H265,2:AAC 3.G711A 4.G711U
|
||||
* @param ctx 播放器指针
|
||||
* @param vendor 输出厂家类型 如果是私有流 应该是H264另外还有厂家类型
|
||||
* @param head 厂家SDK头数据
|
||||
* @param head 厂家SDK头数据长度
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_video_codec_id_vendor_head(mk_player ctx, char* vendor, char* head, int* headLen);
|
||||
|
||||
/**
|
||||
* 获取视频宽度
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_video_width(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取视频高度
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_video_height(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取视频帧率
|
||||
*/
|
||||
API_EXPORT float API_CALL mk_player_video_fps(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取音频codec_id -1:不存在 0:H264,1:H265,2:AAC 3.G711A 4.G711U
|
||||
* @param ctx 播放器指针
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_audio_codec_id(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取音频采样率
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_audio_samplerate(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取音频采样位数,一般为16
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_audio_bit(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取音频通道数
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_player_audio_channel(mk_player ctx);
|
||||
|
||||
/**
|
||||
* 获取点播节目时长,如果是直播返回0,否则返回秒数
|
||||
*/
|
||||
@@ -193,7 +127,6 @@ API_EXPORT int API_CALL mk_player_progress_pos(mk_player ctx);
|
||||
*/
|
||||
API_EXPORT float API_CALL mk_player_loss_rate(mk_player ctx, int track_type);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -40,7 +40,7 @@ API_EXPORT void API_CALL mk_proxy_player_release(mk_proxy_player ctx);
|
||||
/**
|
||||
* 设置代理播放器配置选项
|
||||
* @param ctx 代理播放器指针
|
||||
* @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms/max_analysis_ms
|
||||
* @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms
|
||||
* @param val 配置项值,如果是整形,需要转换成统一转换成string
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_proxy_player_set_option(mk_proxy_player ctx, const char *key, const char *val);
|
||||
|
||||
@@ -60,7 +60,7 @@ API_EXPORT void API_CALL mk_pusher_release(mk_pusher ctx);
|
||||
/**
|
||||
* 设置推流器配置选项
|
||||
* @param ctx 推流器指针
|
||||
* @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms/max_analysis_ms
|
||||
* @param key 配置项键,支持 net_adapter/rtp_type/rtsp_user/rtsp_pwd/protocol_timeout_ms/media_timeout_ms/beat_interval_ms
|
||||
* @param val 配置项值,如果是整形,需要转换成统一转换成string
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_pusher_set_option(mk_pusher ctx, const char *key, const char *val);
|
||||
|
||||
@@ -17,6 +17,25 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////Buffer::Ptr/////////////////////////////////////////////
|
||||
|
||||
typedef void *mk_buffer;
|
||||
typedef void(API_CALL *on_mk_buffer_free)(void *user_data, void *data);
|
||||
|
||||
/**
|
||||
* 创建buffer对象
|
||||
* @param data 数据指针
|
||||
* @param len 数据长度
|
||||
* @param cb 数据指针free回调函数,该参数置空时,内部会拷贝数据
|
||||
* @param user_data 数据指针free回调函数on_mk_buffer_free第一个参数
|
||||
* @return buffer对象
|
||||
*/
|
||||
API_EXPORT mk_buffer API_CALL mk_buffer_from_char(const char *data, size_t len, on_mk_buffer_free cb, void *user_data);
|
||||
API_EXPORT mk_buffer API_CALL mk_buffer_ref(mk_buffer buffer);
|
||||
API_EXPORT void API_CALL mk_buffer_unref(mk_buffer buffer);
|
||||
API_EXPORT const char* API_CALL mk_buffer_get_data(mk_buffer buffer);
|
||||
API_EXPORT size_t API_CALL mk_buffer_get_size(mk_buffer buffer);
|
||||
|
||||
///////////////////////////////////////////SockInfo/////////////////////////////////////////////
|
||||
//SockInfo对象的C映射
|
||||
typedef void* mk_sock_info;
|
||||
@@ -47,15 +66,27 @@ API_EXPORT uint16_t API_CALL mk_sock_info_local_port(const mk_sock_info ctx);
|
||||
///////////////////////////////////////////TcpSession/////////////////////////////////////////////
|
||||
//TcpSession对象的C映射
|
||||
typedef void* mk_tcp_session;
|
||||
typedef void* mk_tcp_session_ref;
|
||||
|
||||
//获取基类指针以便获取其网络相关信息
|
||||
API_EXPORT mk_sock_info API_CALL mk_tcp_session_get_sock_info(const mk_tcp_session ctx);
|
||||
|
||||
//TcpSession::safeShutdown()
|
||||
API_EXPORT void API_CALL mk_tcp_session_shutdown(const mk_tcp_session ctx,int err,const char *err_msg);
|
||||
//TcpSession::send()
|
||||
API_EXPORT void API_CALL mk_tcp_session_send(const mk_tcp_session ctx,const char *data,size_t len);
|
||||
API_EXPORT void API_CALL mk_tcp_session_send(const mk_tcp_session ctx, const char *data, size_t len);
|
||||
API_EXPORT void API_CALL mk_tcp_session_send_buffer(const mk_tcp_session ctx, mk_buffer buffer);
|
||||
|
||||
//切换到该对象所在线程后再TcpSession::send()
|
||||
API_EXPORT void API_CALL mk_tcp_session_send_safe(const mk_tcp_session ctx,const char *data,size_t len);
|
||||
API_EXPORT void API_CALL mk_tcp_session_send_safe(const mk_tcp_session ctx, const char *data, size_t len);
|
||||
API_EXPORT void API_CALL mk_tcp_session_send_buffer_safe(const mk_tcp_session ctx, mk_buffer buffer);
|
||||
|
||||
//创建mk_tcp_session的弱引用
|
||||
API_EXPORT mk_tcp_session_ref API_CALL mk_tcp_session_ref_from(const mk_tcp_session ctx);
|
||||
//删除mk_tcp_session的弱引用
|
||||
API_EXPORT void mk_tcp_session_ref_release(const mk_tcp_session_ref ref);
|
||||
//根据弱引用获取mk_tcp_session,如果mk_tcp_session已经销毁,那么返回NULL
|
||||
API_EXPORT mk_tcp_session mk_tcp_session_from_ref(const mk_tcp_session_ref ref);
|
||||
|
||||
///////////////////////////////////////////自定义tcp服务/////////////////////////////////////////////
|
||||
|
||||
@@ -71,10 +102,9 @@ typedef struct {
|
||||
* 收到客户端发过来的数据
|
||||
* @param server_port 服务器端口号
|
||||
* @param session 会话处理对象
|
||||
* @param data 数据指针
|
||||
* @param len 数据长度
|
||||
* @param buffer 数据
|
||||
*/
|
||||
void (API_CALL *on_mk_tcp_session_data)(uint16_t server_port,mk_tcp_session session,const char *data,size_t len);
|
||||
void (API_CALL *on_mk_tcp_session_data)(uint16_t server_port,mk_tcp_session session, mk_buffer buffer);
|
||||
|
||||
/**
|
||||
* 每隔2秒的定时器,用于管理超时等任务
|
||||
@@ -161,10 +191,9 @@ typedef struct {
|
||||
/**
|
||||
* 收到tcp服务器发来的数据
|
||||
* @param client tcp客户端
|
||||
* @param data 数据指针
|
||||
* @param len 数据长度
|
||||
* @param buffer 数据
|
||||
*/
|
||||
void (API_CALL *on_mk_tcp_client_data)(mk_tcp_client client,const char *data,size_t len);
|
||||
void (API_CALL *on_mk_tcp_client_data)(mk_tcp_client client, mk_buffer buffer);
|
||||
|
||||
/**
|
||||
* 每隔2秒的定时器,用于管理超时等任务
|
||||
@@ -205,6 +234,7 @@ API_EXPORT void API_CALL mk_tcp_client_connect(mk_tcp_client ctx, const char *ho
|
||||
* @param len 数据长度,等于0时,内部通过strlen获取
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_tcp_client_send(mk_tcp_client ctx, const char *data, int len);
|
||||
API_EXPORT void API_CALL mk_tcp_client_send_buffer(mk_tcp_client ctx, mk_buffer buffer);
|
||||
|
||||
/**
|
||||
* 切换到本对象的网络线程后再发送数据
|
||||
@@ -213,6 +243,7 @@ API_EXPORT void API_CALL mk_tcp_client_send(mk_tcp_client ctx, const char *data,
|
||||
* @param len 数据长度,等于0时,内部通过strlen获取
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_tcp_client_send_safe(mk_tcp_client ctx, const char *data, int len);
|
||||
API_EXPORT void API_CALL mk_tcp_client_send_buffer_safe(mk_tcp_client ctx, mk_buffer buffer);
|
||||
|
||||
/**
|
||||
* 客户端附着用户数据
|
||||
|
||||
@@ -52,6 +52,31 @@ API_EXPORT mk_thread API_CALL mk_thread_from_pool();
|
||||
*/
|
||||
API_EXPORT mk_thread API_CALL mk_thread_from_pool_work();
|
||||
|
||||
typedef void* mk_thread_pool;
|
||||
|
||||
/**
|
||||
* 创建线程池
|
||||
* @param name 线程池名称,方便调试
|
||||
* @param n_thread 线程个数,0时为cpu个数
|
||||
* @param priority 线程优先级,分为PRIORITY_LOWEST = 0,PRIORITY_LOW, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_HIGHEST
|
||||
* @return 线程池
|
||||
*/
|
||||
API_EXPORT mk_thread_pool API_CALL mk_thread_pool_create(const char *name, size_t n_thread, int priority);
|
||||
|
||||
/**
|
||||
* 销毁线程池
|
||||
* @param pool 线程池
|
||||
* @return 0:成功
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_thread_pool_release(mk_thread_pool pool);
|
||||
|
||||
/**
|
||||
* 从线程池获取一个线程
|
||||
* @param pool 线程池
|
||||
* @return 线程
|
||||
*/
|
||||
API_EXPORT mk_thread API_CALL mk_thread_from_thread_pool(mk_thread_pool pool);
|
||||
|
||||
///////////////////////////////////////////线程切换/////////////////////////////////////////////
|
||||
typedef void (API_CALL *on_mk_async)(void *user_data);
|
||||
|
||||
@@ -61,7 +86,16 @@ typedef void (API_CALL *on_mk_async)(void *user_data);
|
||||
* @param cb 回调函数
|
||||
* @param user_data 用户数据指针
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_async_do(mk_thread ctx,on_mk_async cb, void *user_data);
|
||||
API_EXPORT void API_CALL mk_async_do(mk_thread ctx, on_mk_async cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 切换到事件线程并延时执行
|
||||
* @param ctx 事件线程
|
||||
* @param ms 延时时间,单位毫秒
|
||||
* @param cb 回调函数
|
||||
* @param user_data 用户数据指针
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_async_do_delay(mk_thread ctx, size_t ms, on_mk_async cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 切换到事件线程并同步执行
|
||||
@@ -69,7 +103,7 @@ API_EXPORT void API_CALL mk_async_do(mk_thread ctx,on_mk_async cb, void *user_da
|
||||
* @param cb 回调函数
|
||||
* @param user_data 用户数据指针
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_sync_do(mk_thread ctx,on_mk_async cb, void *user_data);
|
||||
API_EXPORT void API_CALL mk_sync_do(mk_thread ctx, on_mk_async cb, void *user_data);
|
||||
|
||||
///////////////////////////////////////////定时器/////////////////////////////////////////////
|
||||
typedef void* mk_timer;
|
||||
@@ -88,7 +122,7 @@ typedef uint64_t (API_CALL *on_mk_timer)(void *user_data);
|
||||
* @param user_data 用户数据指针
|
||||
* @return 定时器对象
|
||||
*/
|
||||
API_EXPORT mk_timer API_CALL mk_timer_create(mk_thread ctx,uint64_t delay_ms, on_mk_timer cb, void *user_data);
|
||||
API_EXPORT mk_timer API_CALL mk_timer_create(mk_thread ctx, uint64_t delay_ms, on_mk_timer cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 销毁和取消定时器
|
||||
@@ -96,6 +130,31 @@ API_EXPORT mk_timer API_CALL mk_timer_create(mk_thread ctx,uint64_t delay_ms, on
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_timer_release(mk_timer ctx);
|
||||
|
||||
///////////////////////////////////////////信号量/////////////////////////////////////////////
|
||||
|
||||
typedef void* mk_sem;
|
||||
|
||||
/**
|
||||
* 创建信号量
|
||||
*/
|
||||
API_EXPORT mk_sem API_CALL mk_sem_create();
|
||||
|
||||
/**
|
||||
* 销毁信号量
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_sem_release(mk_sem sem);
|
||||
|
||||
/**
|
||||
* 信号量加n
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_sem_post(mk_sem sem, size_t n);
|
||||
|
||||
/**
|
||||
* 信号量减1
|
||||
* @param sem
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_sem_wait(mk_sem sem);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
135
api/include/mk_track.h
Normal file
135
api/include/mk_track.h
Normal file
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||
*
|
||||
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||
*
|
||||
* Use of this source code is governed by MIT license that can be found in the
|
||||
* LICENSE file in the root of the source tree. All contributing project authors
|
||||
* may be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef ZLMEDIAKIT_MK_TRACK_H
|
||||
#define ZLMEDIAKIT_MK_TRACK_H
|
||||
|
||||
#include "mk_common.h"
|
||||
#include "mk_frame.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//音视频轨道
|
||||
typedef void* mk_track;
|
||||
//输出frame回调
|
||||
typedef void(API_CALL *on_mk_frame_out)(void *user_data, mk_frame frame);
|
||||
|
||||
//track创建参数
|
||||
typedef union {
|
||||
struct {
|
||||
int width;
|
||||
int height;
|
||||
int fps;
|
||||
} video;
|
||||
|
||||
struct {
|
||||
int channels;
|
||||
int sample_rate;
|
||||
} audio;
|
||||
} codec_args;
|
||||
|
||||
/**
|
||||
* 创建track对象引用
|
||||
* @param codec_id 请参考MKCodecXXX 常量定义
|
||||
* @param args 视频或音频参数
|
||||
* @return track对象引用
|
||||
*/
|
||||
API_EXPORT mk_track API_CALL mk_track_create(int codec_id, codec_args *args);
|
||||
|
||||
/**
|
||||
* 减引用track对象
|
||||
* @param track track对象
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_track_unref(mk_track track);
|
||||
|
||||
/**
|
||||
* 引用track对象
|
||||
* @param track track对象
|
||||
* @return 新的track引用对象
|
||||
*/
|
||||
API_EXPORT mk_track API_CALL mk_track_ref(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取track 编码codec类型,请参考MKCodecXXX定义
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_codec_id(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取编码codec名称
|
||||
*/
|
||||
API_EXPORT const char* API_CALL mk_track_codec_name(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取比特率信息
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_bit_rate(mk_track track);
|
||||
|
||||
/**
|
||||
* 监听frame输出事件
|
||||
* @param track track对象
|
||||
* @param cb frame输出回调
|
||||
* @param user_data frame输出回调用户指针参数
|
||||
*/
|
||||
API_EXPORT void *API_CALL mk_track_add_delegate(mk_track track, on_mk_frame_out cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 取消frame输出事件监听
|
||||
* @param track track对象
|
||||
* @param tag mk_track_add_delegate返回值
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_track_del_delegate(mk_track track, void *tag);
|
||||
|
||||
/**
|
||||
* 输入frame到track,通常你不需要调用此api
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_track_input_frame(mk_track track, mk_frame frame);
|
||||
|
||||
/**
|
||||
* track是否为视频
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_is_video(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取视频宽度
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_video_width(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取视频高度
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_video_height(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取视频帧率
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_video_fps(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取音频采样率
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_audio_sample_rate(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取音频通道数
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_audio_channel(mk_track track);
|
||||
|
||||
/**
|
||||
* 获取音频位数,一般为16bit
|
||||
*/
|
||||
API_EXPORT int API_CALL mk_track_audio_sample_bit(mk_track track);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //ZLMEDIAKIT_MK_TRACK_H
|
||||
154
api/include/mk_transcode.h
Normal file
154
api/include/mk_transcode.h
Normal file
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||
*
|
||||
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||
*
|
||||
* Use of this source code is governed by MIT license that can be found in the
|
||||
* LICENSE file in the root of the source tree. All contributing project authors
|
||||
* may be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef ZLMEDIAKIT_MK_TRANSCODE_H
|
||||
#define ZLMEDIAKIT_MK_TRANSCODE_H
|
||||
|
||||
#include "mk_common.h"
|
||||
#include "mk_track.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//解码器对象
|
||||
typedef void *mk_decoder;
|
||||
//解码后的frame
|
||||
typedef void *mk_frame_pix;
|
||||
//SwsContext的包装
|
||||
typedef void *mk_swscale;
|
||||
//FFmpeg原始解码帧对象
|
||||
typedef struct AVFrame AVFrame;
|
||||
//FFmpeg编解码器对象
|
||||
typedef struct AVCodecContext AVCodecContext;
|
||||
//解码输出回调
|
||||
typedef void(API_CALL *on_mk_decode)(void *user_data, mk_frame_pix frame);
|
||||
|
||||
/**
|
||||
* 创建解码器
|
||||
* @param track track对象
|
||||
* @param thread_num 解码线程数,0时为自动
|
||||
* @return 返回解码器对象,NULL代表失败
|
||||
*/
|
||||
API_EXPORT mk_decoder API_CALL mk_decoder_create(mk_track track, int thread_num);
|
||||
|
||||
/**
|
||||
* 销毁解码器
|
||||
* @param ctx 解码器对象
|
||||
* @param flush_frame 是否等待所有帧解码成功
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_decoder_release(mk_decoder ctx, int flush_frame);
|
||||
|
||||
/**
|
||||
* 解码音视频帧
|
||||
* @param ctx 解码器
|
||||
* @param frame 帧对象
|
||||
* @param async 是否异步解码
|
||||
* @param enable_merge 是否合并帧解码,有些情况下,需要把时间戳相同的slice合并输入到解码器才能解码
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_decoder_decode(mk_decoder ctx, mk_frame frame, int async, int enable_merge);
|
||||
|
||||
/**
|
||||
* 设置异步解码最大帧缓存积压数限制
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_decoder_set_max_async_frame_size(mk_decoder ctx, size_t size);
|
||||
|
||||
/**
|
||||
* 设置解码输出回调
|
||||
* @param ctx 解码器
|
||||
* @param cb 回调函数
|
||||
* @param user_data 回调函数用户指针参数
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_decoder_set_cb(mk_decoder ctx, on_mk_decode cb, void *user_data);
|
||||
|
||||
/**
|
||||
* 获取FFmpeg原始AVCodecContext对象
|
||||
* @param ctx 解码器
|
||||
*/
|
||||
API_EXPORT const AVCodecContext* API_CALL mk_decoder_get_context(mk_decoder ctx);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* 创建解码帧mk_frame_pix新引用
|
||||
* @param frame 原始引用
|
||||
* @return 新引用
|
||||
*/
|
||||
API_EXPORT mk_frame_pix API_CALL mk_frame_pix_ref(mk_frame_pix frame);
|
||||
|
||||
/**
|
||||
* 解码帧mk_frame_pix减引用
|
||||
* @param frame 原始引用
|
||||
*/
|
||||
API_EXPORT void API_CALL mk_frame_pix_unref(mk_frame_pix frame);
|
||||
|
||||
/**
|
||||
* 从FFmpeg AVFrame转换为mk_frame_pix
|
||||
* @param frame FFmpeg AVFrame
|
||||
* @return mk_frame_pix对象
|
||||
*/
|
||||
API_EXPORT mk_frame_pix API_CALL mk_frame_pix_from_av_frame(AVFrame *frame);
|
||||
|
||||
/**
|
||||
* 获取FFmpeg AVFrame对象
|
||||
* @param frame 解码帧mk_frame_pix
|
||||
* @return FFmpeg AVFrame对象
|
||||
*/
|
||||
API_EXPORT AVFrame* API_CALL mk_frame_pix_get_av_frame(mk_frame_pix frame);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* 创建ffmpeg SwsContext wrapper实例
|
||||
* @param output AVPixelFormat类型,AV_PIX_FMT_BGR24==3
|
||||
* @param width 目标宽度,置0时,则与输入时一致
|
||||
* @param height 目标高度,置0时,则与输入时一致
|
||||
* @return SwsContext wrapper 实例
|
||||
*/
|
||||
API_EXPORT mk_swscale mk_swscale_create(int output, int width, int height);
|
||||
|
||||
/**
|
||||
* 释放ffmpeg SwsContext wrapper实例
|
||||
* @param ctx SwsContext wrapper实例
|
||||
*/
|
||||
API_EXPORT void mk_swscale_release(mk_swscale ctx);
|
||||
|
||||
/**
|
||||
* 使用SwsContext转换pix format
|
||||
* @param ctx SwsContext wrapper实例
|
||||
* @param frame pix frame
|
||||
* @param out 转换后存放的数据指针,用户需要确保提前申请并大小足够
|
||||
* @return sws_scale()返回值:the height of the output slice
|
||||
*/
|
||||
API_EXPORT int mk_swscale_input_frame(mk_swscale ctx, mk_frame_pix frame, uint8_t *out);
|
||||
|
||||
/**
|
||||
* 使用SwsContext转换pix format
|
||||
* @param ctx SwsContext wrapper实例
|
||||
* @param frame pix frame
|
||||
* @return 新的pix frame对象,需要使用mk_frame_pix_unref销毁
|
||||
*/
|
||||
API_EXPORT mk_frame_pix mk_swscale_input_frame2(mk_swscale ctx, mk_frame_pix frame);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
API_EXPORT uint8_t** API_CALL mk_get_av_frame_data(AVFrame *frame);
|
||||
API_EXPORT int* API_CALL mk_get_av_frame_line_size(AVFrame *frame);
|
||||
API_EXPORT int64_t API_CALL mk_get_av_frame_dts(AVFrame *frame);
|
||||
API_EXPORT int64_t API_CALL mk_get_av_frame_pts(AVFrame *frame);
|
||||
API_EXPORT int API_CALL mk_get_av_frame_width(AVFrame *frame);
|
||||
API_EXPORT int API_CALL mk_get_av_frame_height(AVFrame *frame);
|
||||
API_EXPORT int API_CALL mk_get_av_frame_format(AVFrame *frame);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //ZLMEDIAKIT_MK_TRANSCODE_H
|
||||
@@ -7,6 +7,7 @@
|
||||
* LICENSE file in the root of the source tree. All contributing project authors
|
||||
* may be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifdef ENABLE_WEBRTC
|
||||
#ifndef MK_WEBRTC_API_H
|
||||
#define MK_WEBRTC_API_H
|
||||
|
||||
Reference in New Issue
Block a user