zlmediakit实现rtsp流服务器

本次实现是将内存中的H264数据经过zlmediakit实现为rtsp流。

我是用的是CAPI的方式,将zlmediakit作为一个sdk嵌入到自己的程序中而不是作为一个独立的进进程服务。

1.编译完成zkmedialit后会得到bin include lib三个文件夹如图

其中bin中的MediaServer是作为独立的进程使用的zlmediakit服务,我们这里不用

我们使用lib下的libmk_api.so

下面说一些使用的API以及调用顺序

1.首先包含头文件

#include "mk_mediakit.h"

2.从zkmediakit工程中拷贝demo的配置文件config.ini过来

3.初始化环境,日志以及设置配置文件

  char *ini_path = mk_util_get_exe_dir("config.ini");mk_config config = {.ini = ini_path,.ini_is_path = 1,.log_level = 0,.log_mask = LOG_CONSOLE,.log_file_path = NULL,.log_file_days = 0,.ssl = NULL,.ssl_is_path = 1,.ssl_pwd = NULL,.thread_num = 0};mk_env_init(&config);mk_free(ini_path);

4.启动各个服务

 mk_http_server_start(80, 0);mk_rtsp_server_start(554, 0);mk_rtmp_server_start(1935, 0);mk_rtc_server_start(atoi(mk_get_option("rtc.port")));

5.监听事件,我这里没有处理所以把回调都设置为空

    mk_events events = {.on_mk_media_changed = NULL,.on_mk_media_publish = NULL,.on_mk_media_play = NULL,.on_mk_media_not_found = NULL,.on_mk_media_no_reader = NULL,.on_mk_http_request = NULL,.on_mk_http_access = NULL,.on_mk_http_before_access = NULL,.on_mk_rtsp_get_realm = NULL,.on_mk_rtsp_auth = NULL,.on_mk_record_mp4 = NULL,.on_mk_shell_login = NULL,.on_mk_flow_report = NULL};mk_events_listen(&events);

6.创建媒体源

 mk_media media = mk_media_create("__defaultVhost__", "live", "stream1", 0, 0, 0);

这么写的话最终rtsp日志为rtsp://ip:554/live/stream1

7.添加视频轨道并设置视频编码参数

    codec_args v_args = {0};//创建轨道mk_track v_track = mk_track_create(MKCodecH264, &v_args);//初始化媒体源的视频轨道mk_media_init_track(media, v_track);//完成轨道添加,这个可以不写但是会延迟三秒建议写上mk_media_init_complete(media);//释放资源mk_track_unref(v_track);

8.循环网里面塞入H264帧,记得计算dts我这里是25帧所以每一帧dts加40

    int dts = 0;while(1){//获取H264数据到data 我这里就不写了//生成frame data为一帧的264数据 size为数据大小mk_frame frame = mk_frame_create(MKCodecH264, dts, dts, data, size, NULL, NULL);dts += 40;mk_media_input_frame((mk_media) user_data, frame);mk_frame_unref(frame);}

9.程序结束的时候调用下面销毁资源

    mk_media_release(media);mk_stop_all_server();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/173307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

凸包问题的GRAHAM-SCAN解法 open3d c++ 代码

使用了Open3D库进行点云处理和可视化。下面是代码的大致解释: 引入必要的头文件和命名空间: 定义了三个函数: ComputeTriangleDirArea:计算带符号三角形的面积。Compute2Ddistance:计算两点之间的平面距离。GetConvexHullByGrahamScan:通过Graham Scan方法计算凸包点集。…

生成EtherCAT从站XML图片信息方法

0 工具准备 1.PS CS6 2.Hex Editor Neo(文件Hex编辑器) 3.DM3E-556步进电机驱动器 4.TwinCAT(验证XML图片修改效果)1 准备一张需要生成图片信息的图片 根据EtherCAT从站XML图片格式规范,我们需要用到的元素名为ImageData16x14,它要求使用16x14分辨率、深度为16bit的bmp…

基于C#实现鸡尾酒排序(双向冒泡排序)

通俗易懂点的话,就叫“双向冒泡排序”。 冒泡是一个单向的从小到大或者从大到小的交换排序,而鸡尾酒排序是双向的,从一端进行从小到大排序,从另一端进行从大到小排序。 从图中可以看到,第一次正向比较,我们…

Rust语言入门教程(九) - 结构体

格式及语法 在其他很多编程语言中,有类(Class)的存在,在Rust中,我们没有类(Class)的概念,我们使用结构体(Struct)。 与一个结构体相关的有以下几个部分: 数据字段方法关联函数 声明一个结构体及其字段的格式如下&am…

二叉树:leetcode1457. 二叉树中的伪回文路径

给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 给定二叉树的节点数目…

Python提取PDF表格(基于AUTOSAR_SWS_CANDriver.pdf)

个人学习笔记,仅供参考。 需求:提取AUTOSAR SWS中所有的API接口信息,用于生成C代码。 此处以AUTOSAR_SWS_CANDriver.pdf为例,若需要提取多个SWS文件,遍历各个文件即可。 1.Python包 pdfplumber是一款完全用python开…

uniapp (vue3)生成二维码

在uni-app中生成二维码,我们可以使用第三方库qrcode.js。以下是一个简单的示例: 首先,我们需要安装qrcode.js库,可以通过npm进行安装: npm install qrcode然后,在你的Vue组件中引入并使用这个库&#xff…

泗博MODBUS转PROFINET网关TS-181/TS-180型号对比

上海泗博原有MODBUS转PROFINET网关TS-180在客户实际使用中获得了不错的反响。由于工业应用场景的多类,有客户对串口的需求不是那么多,想要性价比更高的产品,因此TS-181应运而生。相较于TS-180而言,TS-181有更高的性价比&#xff0…

【C++高阶(五)】哈希思想--哈希表哈希桶

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 哈希结构 1. 前言2. unordered系列容器3. 哈希概…

论文阅读:C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range SLAM

前言 论文全程为C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range Simultaneous Localization and Mapping,是发表在MDPI drones(二区,IF4.8)上的一篇论文。这篇文章使用单目相机、惯性测量单元( IMU )和UWB设备作为…

多货币转换多语言切换的跨境电商源码,实现全球购物的自由流通

WoShop跨境电商源码 在全球经济一体化的今天,跨境电商的发展日益蓬勃。为了满足不同国家和地区用户的购物需求,我们开发了一款多货币转换多语言切换的跨境电商源码,实现全球购物的自由流通。 一、多货币转换 在跨境电商交易中,货币…

.net面试题6

1.请解释一下C#中的并发(Concurrency)。 并发是一种程序设计模式,旨在最大限度地利用计算机处理器的性能。C#中的并发主要通过使用多线程来实现,允许程序同时执行多个任务或操作。C#中的多线程通过使用Thread类、Task类、ThreadPo…

关于铝镓氮(AlGaN)上p-GaN的高选择性、低损伤蚀刻

引言 GaN基高电子迁移率晶体管(HEMT)由于其高频和低导通电阻的特性,近来在功率开关应用中引起了广泛关注。二维电子气(2DEG)是由AlGaN/GaN异质结中强烈的自发和压电极化效应引起的,这导致传统器件通常处于…

3.一维数组——输入十个数,输出其中最大(小)数

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为一维数组编程题,点滴成长,一起逆袭。 一、题目描述 输入十个数,输出其中最大(小)数 二、题目分析 打擂台法:maxa[0]; 最大…

FinGPT:金融垂类大模型架构

Overview 动机 架构 底座模型: Llama2Chatglm2 Lora训练 技术路径 自动收集数据并整理 指令微调 舆情分析 搜新闻然后相似搜索 检索增强架构 智能投顾 Hugging face 地址 学术成果及未来方向 参考资料

mybatis 的动态数据源2

config包下 /*** 注入动态数据源*/ public class DynamicDataSource extends AbstractRoutingDataSource {Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSource();} }/*** 配置数据源并注入到 DynamicDataSource*/ Configu…

开源万能DIY预约小程序源码系统+自由DIY,海量模板任选择,附带完整的搭建教程

在移动互联网时代,用户对于预约服务的便捷性和高效性需求日益增长。为了满足这一需求,我们凭借多年的技术积累和经验,开发出了这款开源万能DIY预约小程序源码系统。该系统的推出旨在帮助开发者快速构建功能丰富、符合用户需求的预约小程序&am…

nginx配置及理解

nginx概述 nginx是一款自由的,开源的,高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP,POP3,SMTP代理服务器;nginx可以作为一个Http服务器进行网站的发布处理,另外nginx可以作为方向代理进行负载均衡…

[ CSS ] 内容超出容器后 以...省略

内容超出容器后 以…省略 当前效果 代码 <template><div class"box">有志者&#xff0c;事竟成&#xff0c;破釜沉舟&#xff0c;百二秦关终属楚; 有心人&#xff0c;天不负&#xff0c;卧薪尝胆&#xff0c;三千越甲可吞吴</div> </templa…

TechSmith Camtasia2024中文版简单好用的视频处理软件

TechSmith Camtasia 2024中文版是由techsmith公司推出的一款简单好用的视频处理软件&#xff0c;它集视频录制与视频后期处理为一体&#xff0c;用户可以使用软件来进行屏幕录制&#xff0c;其中包括了影像、音效、鼠标移动的轨迹、解说声音等任何模式下的电脑屏幕状态&#xf…