参考:
https://www.jianshu.com/p/3957c55a702d
实时模式用于传送实时多媒体流。
实时模式下,数据分片(默认是1316 = 7 * 188,188是单个MPEG TS大小)在一定的速率控制下发出,并且在接收端按照发送端发送的时间间隔重新组织好。
默认情况下,接收端重组会有一定的时延,默认为120ms。
参考
https://github.com/Haivision/srt/blob/master/examples/test-c-server.c
和
https://github.com/Haivision/srt/blob/master/examples/test-c-client.c
test-c-server.c
#include <stdio.h>
#include <stdlib.h>
#include "srt/srt.h"
int main(int argc, char** argv)
{
int ss, st;
struct sockaddr_in sa;
int yes = 1;
struct sockaddr_storage their_addr;
if (argc != 3) {
fprintf(stderr, "Usage: %s <host> <port>\n", argv[0]);
return 1;
}
printf("srt startup\n");
srt_startup();
printf("srt socket\n");
ss = srt_create_socket();
if (ss == SRT_ERROR)
{
fprintf(stderr, "srt_socket: %s\n", srt_getlasterror_str());
return 1;
}
printf("srt bind address\n");
sa.sin_family = AF_INET;
sa.sin_port = htons(atoi(argv[2]));
if (inet_pton(AF_INET, argv[1], &sa.sin_addr) != 1)
{
return 1;
}
printf("srt setsockflag\n");
srt_setsockflag(ss, SRTO_RCVSYN, &yes, sizeof yes);
printf("srt bind\n");
st = srt_bind(ss, (struct sockaddr*)&sa, sizeof sa);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_bind: %s\n", srt_getlasterror_str());
return 1;
}
printf("srt listen\n");
st = srt_listen(ss, 2);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_listen: %s\n", srt_getlasterror_str());
return 1;
}
printf("srt accept\n");
int addr_size = sizeof their_addr;
int their_fd = srt_accept(ss, (struct sockaddr *)&their_addr, &addr_size);
int i;
for (i = 0; i < 100; i++)
{
printf("srt recvmsg #%d... ",i);
char msg[2048];
st = srt_recvmsg(their_fd, msg, sizeof msg);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_recvmsg: %s\n", srt_getlasterror_str());
goto end;
}
printf("Got msg of len %d << %s\n", st, msg);
}
end:
printf("srt close\n");
st = srt_close(ss);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_close: %s\n", srt_getlasterror_str());
return 1;
}
printf("srt cleanup\n");
srt_cleanup();
return 0;
}
test-c-client.c
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#define usleep(x) Sleep(x / 1000)
#else
#include <unistd.h>
#endif
#include "srt/srt.h"
int main(int argc, char** argv)
{
int ss, st;
struct sockaddr_in sa;
int yes = 1;
const char message [] = "This message should be sent to the other side";
if (argc != 3) {
fprintf(stderr, "Usage: %s <host> <port>\n", argv[0]);
return 1;
}
printf("srt startup\n");
srt_startup();
printf("srt socket\n");
ss = srt_create_socket();
if (ss == SRT_ERROR)
{
fprintf(stderr, "srt_socket: %s\n", srt_getlasterror_str());
return 1;
}
printf("srt remote address\n");
sa.sin_family = AF_INET;
sa.sin_port = htons(atoi(argv[2]));
if (inet_pton(AF_INET, argv[1], &sa.sin_addr) != 1)
{
return 1;
}
printf("srt setsockflag\n");
srt_setsockflag(ss, SRTO_SENDER, &yes, sizeof yes);
// Test deprecated
//srt_setsockflag(ss, SRTO_STRICTENC, &yes, sizeof yes);
printf("srt connect\n");
st = srt_connect(ss, (struct sockaddr*)&sa, sizeof sa);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_connect: %s\n", srt_getlasterror_str());
return 1;
}
int i;
for (i = 0; i < 100; i++)
{
printf("srt sendmsg2 #%d >> %s\n",i,message);
st = srt_sendmsg2(ss, message, sizeof message, NULL);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_sendmsg: %s\n", srt_getlasterror_str());
return 1;
}
usleep(1000); // 1 ms
}
printf("srt close\n");
st = srt_close(ss);
if (st == SRT_ERROR)
{
fprintf(stderr, "srt_close: %s\n", srt_getlasterror_str());
return 1;
}
printf("srt cleanup\n");
srt_cleanup();
return 0;
}
#gcc -std=c99 -lsrt testcserver.c -o server
gcc -lsrt test-c-server.c -o server
测试:
./test-c-server 127.0.0.1 10086
./test-c-client 127.0.0.1 10086
docs/api.md要仔细看
srt.h中的接口文件
如果只想看cpp里的注释
grep -nR "//" `find . -name *.cpp` >zhushi.txt
分享到:
相关推荐
这是一个用于将 SRT 文件翻译成其他语言的 Ruby 库。 当前功能包括用于翻译 srt 文件的谷歌翻译。 安装 将此行添加到应用程序的 Gemfile 中: gem 'translator-srt' 或者从 github 添加最新版本: gem '...
传奇字幕 转 srt 含视频教程 及excel 文件 00:00:14:17 00:00:15:17 大家好 txt格式字幕 转 srt
将srt文件转换为txt段落
字幕文件srt格式,转txt。打开文件,另存为txt。srt文件直接用txt打开有时间线,用这款软件另存,没有时间信息。
适合开发SRT协议的软件工程师,源码是srt协议的caller即client端,主动连接srt的server端,连上后发送数据
SRT的参考实现要求每个发送者3个线程,每个接收者5个线程。 使用srt-rs,您可以使用期货调度将所需数量的连接分配给所需数量的线程(通常是拥有核心的线程)。 这应该允许处理更多的连接。 例子 生成并发送SRT...
在UI上选择一个文件夹目录,这个工具会自动把这个目录下(包括子目录)的所有VTT文件自动转化成SRT文件。这样方便影音播放软件自动加载字幕。 注:这是第一个版本,如果在使用过程中遇到什么问题,请回帖。我会升级...
dji-srt-viewer 可视化DJI SRT日志在此处现场试用: : 在实例模式( )和以下NPM模块中使用P5js( ) 可以使用Browserify( )和Babelify( )构建此处的讨论和建议: : 使用此效果和After Effects创建的示例视频: ...
歌词转字幕工具,KRC转LRC,LRC转SRT工具,也可以直接由KRC文件转换为SRT文件.
lynda-translator-srt 这是一个 Ruby 库,用于将 lynda.com 的成绩单课程翻译成其他语言。 当前功能包括Google Translate 。 安装 将此行添加到应用程序的 Gemfile 中: gem 'lynda-translator-srt' 或者从 ...
DJI_SRT_Parser 解析并解释DJI Drones SRT元数据文件中的某些数据。 大多数使用Mavic Pro SRT文件进行了测试。 如果您希望将其实施,可以寄给我。 如果您使用此方法创建了一些东西,请告诉我:)。 用于用于创建带有...
简单的控制台程序,将ASS字幕转换成SRT格式,便于导入Premiere
srt字幕制作的小工具,简单好用。 软件功能简介 “srt字幕助手”可以用于编辑、制作、调整、拆分、合并、预览srt字幕。
lrc2srt ... 如果添加多个文件,则可以下载包含.srt文件的srt.zip。 配套 我们接受,该的线路时间标签格式为[mm:ss.xx]或[mm:ss.xxx]。 可以在(在LineageOS和CyanogenMod中内置)上使用。 执照
xml到srt-cli 将MediathekView(德国)或BBC(英国)等在线广播平台的XML字幕(EBU-TT格式)转换为SRT(SubRip)字幕。 适用于macOS,Windows和Linux。 内容 安装 作为全局CLI模块安装 $ npm install --global ...
要使用这些脚本,您必须有一个要处理的 SubRip (.srt) 文件。 目前,存储库有两个用于处理 SubRip 文件的工具: srt2json.pl - 以 JSON 格式转换 SubRip 文件,并可以通过 Google Translate API 翻译字幕 json2srt....
支持中文字幕和英文字幕制作,视频识别无需上传原视频,可同时处理多个文件,video srt软件适合视频后期制作人员使用,轻松配字幕。 软件介绍 video srt是一款非常智能好用的视频、音频自动生成srt字幕软件。video ...
srt-live-server(SLS)是基于安全可靠传输(SRT)的低延迟开放源代码实时流服务器。 通常,在Internet中,通过SLS进行传输的延迟小于1秒。 要求 请先安装SRT,有关系统环境,请参考SRT( )。 SLS只能在基于linux的...
SRT SRT代表SubRip文本文件格式,这是一种用于存储字幕的文件; 这是用于处理SRT文件的Ruby库。 当前的功能包括解析,追加,拆分和时移(恒定,渐进和基于帧速率)。 安装 将此行添加到您的应用程序的Gemfile中: ...
srt字幕转换成vtt的一个小工具,基本上是替换字符,需要.net4.5。功能简单,把srt字幕的文本内容,一些标点符号进行了替换。