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();
相关文章:
zlmediakit实现rtsp流服务器
本次实现是将内存中的H264数据经过zlmediakit实现为rtsp流。 我是用的是CAPI的方式,将zlmediakit作为一个sdk嵌入到自己的程序中而不是作为一个独立的进进程服务。 1.编译完成zkmedialit后会得到bin include lib三个文件夹如图 其中bin中的MediaServer是作为独立的…...
保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档
1 K8S 简介 K8S是Kubernetes的简称,是一个开源的容器编排平台,用于自动部署、扩展和管理“容器化(containerized)应用程序”的系统。它可以跨多个主机聚集在一起,控制和自动化应用的部署与更新。 K8S 架构 Kubernete…...
耶鲁博弈论笔记
编辑记录: 1126:开个新坑,耶鲁大学的博弈论课程, 和专业相关不大,纯兴趣,尽量写好一点吧 1. 首先指出博弈论是一种研究策略形式的方法,对于经济学中,完全竞争市场只能被动接受均衡…...
一个简易的URL爬虫程序(java)
该程序是一个简单的Java程序,用于从指定的URL中获取网页内容并保存到本地文件。通过URL类打开指定的URL链接,并使用openStream()方法获取输入流。然后使用Scanner类读取输入流中的内容,并使用PrintWriter类将读取到的内容写入到本地文件中。 …...
Deep Learning(wu--46)
文章目录 ContentsBeginBasic逻辑回归SGD导数计算图(反向传播)向量化广播numpy Neural Network向量化激活函数梯度下降深层表示反向传播 Contents Begin Basic 逻辑回归 SGD 导数 计算图(反向传播) 向量化 广播 numpy Neural Netw…...
Java网络爬虫实战
List item 文章目录 ⭐️写在前面的话⭐️📌What is it?分类网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler&a…...
srs的webrtc信令分析
关于webrtc的流信令只有四个 /rtc/v1/publish/,这是推流接口,是推流客户端跟SRS交换SDP的接口 /rtc/v1/play/,这是拉流接口,是拉流客户端跟SRS交换SDP的接口 /rtc/v1/whip/,这也是推流接口,作用是也是交换…...
实现简单的操作服务器和客户端(上)
一、说明 描述:本教程介绍如何使用 simple_action_server 库创建斐波那契动作服务器。此示例操作服务器生成斐波那契序列,目标是序列的顺序,反馈是计算的序列,结果是最终序列。 内容 创建操作消息编写一个简单的服务器 代码...
基于Java SSM框架+Vue实现药品销售进销存网站项目【项目源码+论文说明】
基于java的SSM框架Vue实现药品销售进销存网站演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于药品管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了…...
【刷题笔记】加油站||符合思维方式
加油站 文章目录 加油站1 题目描述2 思路3 解题方法 1 题目描述 https://leetcode.cn/problems/gas-station/ 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消…...
【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例
文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…...
前端 vue 面试题(二)
文章目录 如何让vue页面重新渲染组件间通信vue为什么要mutation、 action操作插槽、具名插槽、作用域插槽vue编译使用的是什么库?vue怎么实现treeshakingwebpack实现treeshaking为什么只有es module 能支持 tree shaking mixin 的作用mixin的底层原理nexTick原理vue…...
MySQL 高可用架构
MySQL 是实际生产中最常用的数据库,生产环境数据量极为庞大,对性能和安全要求很高,单机的 MySQL 是远远达不到的,所以必须搭建一个主从复制架构,同时可以基于一些工具实现高可用架构,在此基础上,…...
JVM虚拟机:G1垃圾回收器的日志分析
本文重点 本文我们将学习G1垃圾回收器的日志 使用 执行命令 java -Xms20M -Xmx20M -XX:PrintGCDetails -XX:UseG1GC 类名 分析 前面我们学习了G1垃圾回收器,它的回收有三种可能: YGC FGC MixedGC GC pause表示STW,Evacuation表示复制对象,…...
解决视口动画插件jquery.aniview.js使用animate.css时无效的问题(最新版本网页视口动画插件的使用及没作用、没反应)
当网站页面元素进入视口时自动应用过渡效果。CSS过渡效果可以为网页添加动画效果,并提供了一种平滑的转换方式,使元素的变化更加流畅和生动。而通过jQuery插件来获取页面滚动位置决定合适调用动画效果。 一、官网 animate.css官网 一款强大的预设css3动…...
【挑战业余一周拿证】一、亚马逊云科技简介 - 第 3 节 - 云计算
第 3 节 - 云计算 在深入了解亚马逊云科技的各个部分之前,让我们先缩小视野,对云进行一个合理的定义。云计算就是通过互联网按需提供 IT 资源并采用按需付费定价模式,下面,我们将进行详细说明。 按需提供表示的是亚马逊云科技会在…...
4. 无向图的各连通分支
题目 求解无向图的各连通分支 输入: 第一行为图的节点数n(节点编号0至n-1,0<n<10) 从第二行开始列出图的边,-1表示输入结束 输出: 输出每个连通分支的广度优先搜索序列(从连通分支的最…...
《golang设计模式》第三部分·行为型模式-08-状态模式(State)
文章目录 1. 概念1.1 作用1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概念 1.1 作用 状态(State)指状态对象,用于封装上下文对象的特定状态行为,使得上下文对象在内部状态改变时能够改变其自身的行为。 1.1 角色…...
tp8 使用rabbitMQ(3)发布/订阅
发布/订阅 当我们想把一个消息,发送给 多个消费者的时候,我们把这种模式叫做发布/订阅模式,比如我们做两个消费者,其中一个消费者把消息写入磁盘中,别一个消费者把消息结果输出到屏幕上,就要用到发布订阅模…...
【nlp】3.4 Transformer论文复现:2. 编码器部分(规范化层、子层连接结构、编码器层)
3.4 Transformer论文复现:2. 编码器部分(规范化层、子层连接结构、编码器层) 2.6 规范化层2.6.1 规范化层的作用2.6.2 规范化层的代码实现2.6.3 规范化层总结2.7 子层连接结构2.7.1 子层连接结构2.7.2 子层连接结构的代码实现2.7.3 子层连接结构总结2.8 编码器层2.8.1 编码器…...
IDM绿色直装版:无限制满速下载神器
今中午下资料,用IDM跑满1000M宽带。100MB/s的速度,三分钟下完2G文件。同事凑过看:“你这下载咋这么快?”我笑:“IDM直装版,不折腾才快。”突然觉得,好工具像高速路。不堵车,事儿就成…...
如何在3分钟内掌握JPEXS Flash反编译器的核心功能
如何在3分钟内掌握JPEXS Flash反编译器的核心功能 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾经面对一个陈旧的SWF文件,想要提取里面的图片、声音或者修改Actio…...
Canine多租户系统实战:团队协作与基于角色的访问控制
Canine多租户系统实战:团队协作与基于角色的访问控制 【免费下载链接】canine A developer friendly PaaS for your Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ca/canine Canine作为一款开发者友好的Kubernetes PaaS平台,提供了强大的…...
Qwen3-14B GPU资源预测:基于历史负载的显存/CPU需求估算模型
Qwen3-14B GPU资源预测:基于历史负载的显存/CPU需求估算模型 1. 引言 在部署大型语言模型时,准确预测GPU资源需求是确保稳定运行的关键。本文将介绍如何基于历史负载数据,为Qwen3-14B模型构建显存和CPU需求的估算模型。这个预测方法特别适用…...
OpenClaw极简部署:Kimi-VL-A3B-Thinking云端镜像10分钟快速体验
OpenClaw极简部署:Kimi-VL-A3B-Thinking云端镜像10分钟快速体验 1. 为什么选择云端沙盒体验OpenClaw 上周我在本地尝试部署OpenClaw时,被复杂的依赖项和端口冲突折腾得够呛。正当准备放弃时,偶然发现星图平台提供了预装OpenClaw和Kimi-VL-A…...
Pixel Script Temple 快速上手:5步完成Visual Studio Code集成与调用
Pixel Script Temple 快速上手:5步完成Visual Studio Code集成与调用 1. 引言 作为一名开发者,你是否经常遇到这样的场景:面对复杂的业务逻辑需要快速生成代码框架,或者需要为已有代码添加详细注释?Pixel Script Tem…...
Applicative Functor应用指南:mostly-adequate-guide-chinese中的瓶中之船与协调激励
Applicative Functor应用指南:mostly-adequate-guide-chinese中的瓶中之船与协调激励 【免费下载链接】mostly-adequate-guide-chinese 函数式编程指南中文版 项目地址: https://gitcode.com/gh_mirrors/mo/mostly-adequate-guide-chinese 在函数式编程的世界…...
智能电脑排班系统V2024|全自动、高自由度、零门槛排班工具
温馨提示:文末有联系方式产品定位:新一代智能电脑排班系统 扩展版智能排班软件(2024最新稳定版)是一款专为中小团队设计的桌面级自动化排班解决方案。 它融合AI逻辑引擎与人性化交互,兼顾智能调度与人工干预自由度&…...
后悔没早看!敏感肌日常修护全攻略,轻松养出健康厚脸皮✨
后悔没早看!敏感肌日常修护全攻略,轻松养出健康厚脸皮✨集美们!谁懂啊🥹 作为天生的薄皮敏感肌,换季泛红、刷酸烂脸、遇热就红通通这些破事我全中!折腾了五六年,踩了无数坑,终于总结…...
OpenClaw+Qwen3.5-9B组合优势:3个不可替代的使用场景
OpenClawQwen3.5-9B组合优势:3个不可替代的使用场景 1. 为什么选择OpenClawQwen3.5-9B组合 去年夏天,当我第一次尝试用Python脚本自动化处理医疗研究数据时,遇到了一个尴尬的问题:要么忍受公有云API的数据隐私风险,要…...
