zlmediakit實(shí)現(xiàn) rtsp流服務(wù)器的方法
本次實(shí)現(xiàn)是將內(nèi)存中的H264數(shù)據(jù)經(jīng)過(guò)zlmediakit實(shí)現(xiàn)為rtsp流。
我是用的是CAPI的方式,將zlmediakit作為一個(gè)sdk嵌入到自己的程序中而不是作為一個(gè)獨(dú)立的進(jìn)進(jìn)程服務(wù)。
1.編譯完成zkmedialit后會(huì)得到bin include lib三個(gè)文件夾如圖
其中bin中的MediaServer是作為獨(dú)立的進(jìn)程使用的zlmediakit服務(wù),我們這里不用
我們使用lib下的libmk_api.so
下面說(shuō)一些使用的API以及調(diào)用順序
1.首先包含頭文件
#include "mk_mediakit.h"
2.從zkmediakit工程中拷貝demo的配置文件config.ini過(guò)來(lái)
3.初始化環(huán)境,日志以及設(shè)置配置文件
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.啟動(dòng)各個(gè)服務(wù)
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.監(jiān)聽事件,我這里沒(méi)有處理所以把回調(diào)都設(shè)置為空
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.創(chuàng)建媒體源
mk_media media = mk_media_create("__defaultVhost__", "live", "stream1", 0, 0, 0);
這么寫的話最終rtsp日志為rtsp://ip:554/live/stream1
7.添加視頻軌道并設(shè)置視頻編碼參數(shù)
codec_args v_args = {0}; //創(chuàng)建軌道 mk_track v_track = mk_track_create(MKCodecH264, &v_args); //初始化媒體源的視頻軌道 mk_media_init_track(media, v_track); //完成軌道添加,這個(gè)可以不寫但是會(huì)延遲三秒建議寫上 mk_media_init_complete(media); //釋放資源 mk_track_unref(v_track);
8.循環(huán)網(wǎng)里面塞入H264幀,記得計(jì)算dts我這里是25幀所以每一幀dts加40
int dts = 0; while(1) { //獲取H264數(shù)據(jù)到data 我這里就不寫了 //生成frame data為一幀的264數(shù)據(jù) size為數(shù)據(jù)大小 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.程序結(jié)束的時(shí)候調(diào)用下面銷毀資源
mk_media_release(media); mk_stop_all_server();
到此這篇關(guān)于zlmediakit實(shí)現(xiàn) rtsp流服務(wù)器的文章就介紹到這了,更多相關(guān)zlmediakit rtsp流服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
運(yùn)維人員處理服務(wù)器故障的方法總結(jié)
作為一個(gè)運(yùn)維人員,遇到服務(wù)器故障是在所難免的,要是再趕上修復(fù)時(shí)間緊、奇葩的技術(shù)平臺(tái)、缺少信息和文檔,基本上這過(guò)程都會(huì)慘痛到讓我們留下深刻的記憶。當(dāng)出現(xiàn)此類問(wèn)題時(shí),應(yīng)該如何處理?本文給大家詳盡的分析了一下,一起來(lái)看看2014-01-01虛擬主機(jī)應(yīng)該如何解決電信網(wǎng)通間互聯(lián)互通
電信和網(wǎng)通兩大基礎(chǔ)網(wǎng)絡(luò),人為地割裂了整個(gè)中國(guó)的網(wǎng)絡(luò)。無(wú)論是選擇把網(wǎng)站托管在電信、還是網(wǎng)通,都等于是在拒絕處于另外一個(gè)網(wǎng)絡(luò)中的客戶,因?yàn)閷?shí)在太慢了2011-10-10Windows安裝Openssl并使用Openss生成公鑰私鑰
這篇文章主要介紹了Windows安裝Openssl并使用Openss生成l公鑰私鑰,需要的朋友可以參考下2020-11-11如何將pem證書轉(zhuǎn)換為.crt和.key與證書格式介紹
這篇文章主要介紹了如何將pem證書轉(zhuǎn)換為.crt和.key與證書格式介紹,需要的朋友可以參考下2024-01-01服務(wù)器常見問(wèn)題匯總(常見故障及相應(yīng)的解決方法)
服務(wù)器一般是很少出現(xiàn)問(wèn)題的,一旦出現(xiàn)問(wèn)題,怎樣去積極的搶救呢?我們不能坐以待斃,原因一旦服務(wù)器故障,那么該服務(wù)器上的所有網(wǎng)站將都會(huì)無(wú)法打開。對(duì)于一個(gè)企業(yè)來(lái)說(shuō),網(wǎng)站就是他們的命脈,損失是巨大的2017-04-04解決Navicat?連接服務(wù)器不成功的問(wèn)題(Access?denied?for?user?'root
這篇文章主要介紹了Navicat?連接服務(wù)器不成功(Access?denied?for?user?'root'@?'*.*.*.*'?(using?password:?YES)),出現(xiàn)這種原因一般是服務(wù)器的root用戶沒(méi)有開啟訪問(wèn)權(quán)限,本文給大家分享解決方法,需要的朋友可以參考下2022-09-09HTTP 錯(cuò)誤 403.1禁止訪問(wèn):禁止執(zhí)行訪問(wèn)的完美解決方法
這篇文章主要介紹了HTTP 錯(cuò)誤 403.1禁止訪問(wèn):禁止執(zhí)行訪問(wèn)的完美解決方法,需要的朋友可以參考下2016-11-11如何讓PHPnow支持wordpress靜態(tài)化鏈接的方法
這篇文章說(shuō)的是PNPnow 的,不過(guò)看了一下,應(yīng)該是說(shuō)的一回事,就是讓wordpress支持偽靜態(tài)2012-09-09