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();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux作业练习题-解答

作业1:调研数据中心物理机及虚拟机的操作系统版本、虚拟环境使用的 Hypervisor 类型、服务器硬件配置、资源使用情况(内存/ CPU /磁盘使用率,网络带宽, I / O 速率等),要求调研两个数…

自己实名绑定了几个微信号?赶紧来看看

我们都明白,微信的重要性无处不在,它与我们生活的方方面面紧密相连。如今,微信支付已成为我们日常生活中不可或缺的一部分。无论是购物、用餐,还是日常消费,微信支付都能轻松解决。如果你担心携带现金会有遗失的风险&a…

低代码时代,如何运用JVS低代码表单组件单选与多选组件提升业务效率?

在现代化的数字界面中,组件是不可或缺的一部分。无论是在问卷调查、投票,还是在购物车等场景中,单选和多选组件都扮演着重要角色。它们让用户能够在一系列选项中做出决定,从而提高交互的效率和用户体验。 JVS低代码表单组件中提供…

Apple Vision Pro 开发机申请

申请地址: (免费租用形式) Developer Kit - visionOS - Apple Developer 上海Apple Lab 互动申请: View - Meet with Apple Experts - Apple Developer (需要完善的产品才能去测试哦) 它是如何工作的 我们将借给你一个Apple Vision Pro开发…

想基于AI变现吗,这个Star有1.8K的开源项目分享给你

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 前言 在如今AI爆发的时代,每个人都想借着AI这股风,进行变现,今天给大家分享一个开源项目,他可以让你基于AI的能力进行变现 项目介绍 …

Doris中的物化视图(十八)

物化视图就是包含了查询结果的数据库对象,可能是对远程数据的本地 copy,也可能是一个表或多表 join 后结果的行或列的子集,也可能是聚合后的结果。说白了,就是预先存储查询结果的一种数据库对象。 在 Doris 中的物化视图&#xf…

指针笔试题分享

今天给大家分享几道关于指针的好题&#xff0c;我觉得的只要是题&#xff0c;都是好题咯&#xff01;下面来看看我们今天的题吧&#xff01; 题目一&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* p…

内网渗透之Linux权限提升大法

文章目录 内网渗透|Linux权限提升大法0x01 前言0x02 工具介绍1.traitor2.LinEnum3.linux-exploit-suggester.sh4.Linux Exploit Suggester 25.beroot 0X02提权手法1.环境变量提权2.利用suid提权3.定时任务提权3.1定时任务文件覆盖提权3.2定时任务tar命令通配符注入提权 4.sudo提…

SPSS信度分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

【shell】脚本实现将开发机user1账户下的abc文件夹复制到user2~4账户下

1 主要内容 可以使用Shell脚本来实现将开发机&#xff08;Linux&#xff09;上user1账户下的abc文件夹复制到user2、user3和user4账户下。 #!/bin/bash# 数组赋值&#xff0c;目标用户列表 # target_users(user2 user3 user4) # 定义数组 target_users()# 生成user数字的数组…

h5小游戏-盖楼游戏

盖楼游戏 一个基于JavaScrtipt、Html5 的盖楼游戏 效果预览 点我下载源代码 Game Rule 游戏规则 以下为默认游戏规则&#xff0c;也可参照下节自定义游戏参数 每局游戏生命值为3&#xff0c;掉落一块楼层生命值减1&#xff0c;掉落3块后游戏结束&#xff0c;单局游戏无时间限…

如何在 Photoshop 中删除颜色

如何在 Photoshop 中删除某种颜色的简单方法 如何在 Photoshop 中删除颜色 步骤1 有很多方法可以在 Photoshop 中删除颜色。作为一般概述&#xff0c;我们希望进行选择&#xff08;在本例中为我们的颜色&#xff09;&#xff0c;然后操作该选择&#xff08;通常删除或屏蔽内容…

Ubuntu开机显示recovering journal,进入emergency mode

在一次正常的shutdown -r now之后&#xff0c;服务器启动不起来了&#xff0c;登录界面显示recovering journal&#xff0c;主要报错信息如下所示&#xff1a; /dev/sda2:recovering journal /dev/sda2:Clearn... You are in emergency mode. After logging in, type journalc…

git 对已有的项目代码建立github仓库

首先在项目根路径下使用以下命令初始化git配置文件&#xff1b; git init关联github仓库地址&#xff0c;我这里使用的是SSH连接方式&#xff1b; git remote add origin gitgithub.com:xxxxx.git关联main分支&#xff0c;其中current_branch代表着你需要push的分支&#xff…

Ubuntu 22.04安装vscode

要在Ubuntu 22.04安装vscode&#xff0c;请完成这些步骤。 首先apt命令更新软件包索引并安装导入微软GPG密钥的依赖软件。 更新&#xff0c;近期内执行过可忽略 sudo apt update安装工具包 sudo apt install software-properties-common apt-transport-https curl当导入GPG后…

快速掌握接口自动化测试的技巧和方法!

通过用Python实现头条项目接口自动化测试&#xff0c;下面一起来学习。 目标 1. 熟悉接口自动化测试的流程2. 能够对一个项目的接口实现自动化测试 接口自动化测试流程 1. 需求分析2. 挑选需要做自动化测试的功能3. 设计测试用例4. 搭建自动化测试环境[可选]5. 设计自动化测…

英语学习软件 Eudic欧路词典 mac中文版介绍说明

欧路词典 mac (Eudic) 是一个功能强大的英语学习工具&#xff0c;它包含了丰富的英语词汇、短语和例句&#xff0c;并提供了发音、例句朗读、单词笔记等功能。 Eudic欧路词典 mac 软件介绍 多语种支持&#xff1a;欧路词典支持多种语言&#xff0c;包括英语、中文、日语、法语…

提高文字识别率的顶级技巧(图片转excel表格文字图片录入篇)

在日常的客服工作中&#xff0c;有很多用户会问我们一个相同的问题&#xff1a;你们的金鸣识别系统识别率能达到百分之几&#xff1f;能不能达到99%甚至100%&#xff1f;我们先来举个极端的例子&#xff1a;用户上传一张图片给我们程序识别&#xff0c;这张图片上的字是手写的&…

【C/C++】素数专题

素数专题 1.判断素数模板2.求范围内的素数&#xff08;101-200&#xff09;3.判断素数与分解 1.判断素数模板 #include<stdio.h> #include<math.h>int prism(int n){if(n1) return 0;for(int i2;i<sqrt(n);i){if(n%i0) return 0;}return 1; }int main() {int n…

JavaFx 设置窗口边框圆角

UI界面要求窗口边框有一定弧度&#xff0c;因为之前没有做过&#xff0c;网上看了很多文章&#xff0c;都用到了css语句 "-fx-background-radius: ; 我在xml布局文件根节点使用无效&#xff0c;在Scene组件设置无效&#xff0c;gpt等ai问了一圈代码也是无效&#xff0c;…