QNTrackInfo
TrackInfo 是 SDK 中对每一路媒体流所有属性的集合,做为一个复合类型在 APP 和 SDK 之间传递媒体流相关数据; TrackInfo 的使用场景:
- 开发者在发布时根据 CreateVideoTrackInfo 或 CreateAudioTrackInfo 构造 TrackInfo 实例
- 在各种事件回调中,由 SDK 向上层传递 Track 实例
// Track 描述信息
class QINIU_EXPORT_DLL QNTrackInfo
{
protected:
string track_id; // Track Id(数据流唯一标识)
string local_id; // Track 在 webrtc 中的标识
string user_id; // 此 Track 所属 User Id
string kind; // VIDEO_KIND_TYPE 或 AUDIO_KIND_TYPE
string tag; // Track 自定义 Tag,由用户指定并使用,SDK 仅做透传
bool master = false; // 是否为主流,默认为 false
bool muted = false; // 是否已静默
int max_bitrate = 0; // 最大码率,单位:bps
int state = 0;
bool connected = false; // 此 track 当前是否处于已连接状态
// 以下成员仅对视频 Track 有效
int width = 0;
int height = 0;
int max_fps = 0;
void* render_hwnd = nullptr; // 渲染窗口句柄,HWND 或 winId(),为空则不渲染,对数据回调无影响
string camera_device_id; // 摄像头设备 Id,仅当 source_type 为 tst_Camera 时有效
TrackSourceType source_type = tst_Invalid;
unsigned long long start_tp = 0;
LayerSubConfigList sub_layer_list; // 订阅端多流信息
bool multi_stream_enable = false; // 是否支持开启多流功能
public:
// 创建视频 Track 实例,用于 PublishTracks 时使用,使用完成后调用 Release 进行释放
// @param camera_device_id_ 摄像头设备 Id,如果不是摄像头采集的话,可为空
// @param tag_ 开发者自定义 tag
// @param render_hwnd_ 视频渲染窗口句柄,如:MFC 下窗口的 m_hWnd 或 Qt 下的 winId(),为 NULL 则不渲染
// @param width_ 数据源宽度
// @param height_ 数据源高度
// @param max_fps_ 最大帧率
// @param max_bitrate_ 最大码率,单位:bps
// @param type_ TrackSourceType 根据具体的数据源进行制定
// @param is_master_ 是否为“主”流,默认为 false;
// 如果需要与 v1 的接口进行互通,则将其中某一路 Track 置为 true
// @return 成功:TrackInfo 指针,否则返回空指针;返回值需由 Release 方法释放
static QNTrackInfo* CreateVideoTrackInfo(
const string& camera_device_id_,
const string& tag_,
void* render_hwnd_,
int width_,
int height_,
int max_fps_,
int max_bitrate_,
TrackSourceType type_,
bool is_master_ = false
);
// 创建音频 Track 实例,用于 PublishTracks 时使用,返回值需由开发者调用 Release 进行释放
// 全局仅能创建并发布一路 Audio Track
// @param tag_ 开发者自定义 tag
// @param max_bitrate_ 最大码率,单位:bps
// @param is_master_ 是否为“主”流,默认为 false;
// 如果需要与 v1 的接口进行互通,则将其中某一路 Track 置为 true
// @return 成功:TrackInfo 指针,否则返回空指针;返回值需由 Release 方法释放
static QNTrackInfo* CreateAudioTrackInfo(
const string& tag_,
int max_bitrate_,
bool is_master_ = false
);
// 释放 CreateVideoTrackInfo 或 CreateAudioTrackInfo 创建的 Track 实例
void Release()
{
delete this;
}
// 拷贝获取一个新的 TrackInfo 实例,返回值需由开发者调用 Release 进行释放
static QNTrackInfo* Copy(QNTrackInfo* track_info_);
static void ReleaseList(TrackInfoList& track_list_);
public:
virtual ~QNTrackInfo() {}
virtual const string& GetTrackId()
{
return track_id;
}
virtual const string& GetLocalId()
{
return local_id;
}
virtual const string& GetUserId()
{
return user_id;
}
virtual const string& GetKind()
{
return kind;
}
virtual const string& GetTag()
{
return tag;
}
virtual bool IsMaster()
{
return master;
}
virtual bool IsMuted()
{
return muted;
}
virtual int GetMaxBitRate()
{
return max_bitrate;
}
virtual int GetState()
{
return state;
}
virtual bool IsConnected()
{
return connected;
}
virtual int GetWidth()
{
return width;
}
virtual int GetHeight()
{
return height;
}
virtual int GetMaxFps()
{
return max_fps;
}
virtual void* GetRenderHwnd()
{
return render_hwnd;
}
void SetRenderHwnd(void* hwnd_)
{
render_hwnd = hwnd_;
}
virtual const string& GetCameramDeviceId()
{
return camera_device_id;
}
virtual TrackSourceType GetSourceType()
{
return source_type;
}
virtual unsigned long long GetStartTP()
{
return start_tp;
}
protected:
QNTrackInfo() {}
QNTrackInfo(const QNTrackInfo&) = delete;
QNTrackInfo operator = (const QNTrackInfo&) = delete;
};