调用libsrt API接口拉流
1、下载libsrt源码路径如下GitHub - Haivision/srt: Secure, Reliable, Transport · GitHubhttps://github.com/Haivision/srt2、编译libsrt源码依赖openssl需要安装openssl3、srt传输的是mpegts数据是在传输mpegts数据时加上了udt数据头4、调用libsrt API接口拉流保存ts文件#include stdio.h #include srt/srt.h #include sys/socket.h // 包含 socket 相关函数如 socket, bind, connect #include netinet/in.h // 包含 struct sockaddr_in 和 sockaddr 的定义 #include arpa/inet.h // 包含地址转换函数如 inet_addr, htons int main(int argc,char *argv[]) { srt_startup(); SRTSOCKET srt_sock srt_create_socket(); if(srt_sock 0) { printf(srt_create_socket error:::::\n); return -1; } int connect_timeout 5000; // 5秒 if (srt_setsockopt(srt_sock, 0, SRTO_CONNTIMEO, connect_timeout, sizeof connect_timeout) 0) { printf(failed to set option SRTO_CONNTIMEO on socket: %s\n, srt_getlasterror_str()); return -1; } SRT_TRANSTYPE transtype SRTT_LIVE; if (srt_setsockopt(srt_sock, 0, SRTO_TRANSTYPE, transtype, sizeof transtype) 0) { printf(failed to set option SRTO_TRANSTYPE on socket: %s\n, srt_getlasterror_str()); return -1; } int latency 200; // 2秒 if (srt_setsockopt(srt_sock, 0, SRTO_RCVLATENCY, latency, sizeof latency) 0) { printf(failed to set option SRTO_RCVLATENCY on socket: %s\n, srt_getlasterror_str()); return -1; } const char* streamid stream123; if (srt_setsockopt(srt_sock, 0, SRTO_STREAMID, streamid, strlen(streamid)) 0) { printf(failed to set option SRTO_STREAMID on socket: %s\n, srt_getlasterror_str()); return -1; } struct sockaddr_in serveraddr; serveraddr.sin_family AF_INET; serveraddr.sin_addr.s_addr inet_addr(argv[1]); serveraddr.sin_port htons(atoi(argv[2])); if(SRT_ERROR srt_connect(srt_sock, (struct sockaddr *)serveraddr, sizeof(serveraddr))) { printf(srt_connect error:::::%s\n,srt_getlasterror_str()); srt_close(srt_sock); srt_cleanup(); return -1; } char buf[2048] {0}; int bytes 0; FILE *w_fd fopen(./srt_request.ts,w); while(1) { bytes srt_recvmsg(srt_sock, buf, 2048); if (bytes 0) { if (bytes 0) { printf(Connection closed by peer\n); } else { printf(Recv error: %s\n, srt_getlasterror_str()); } break; } printf(srt_recvmsg bytes:::::%d\n,bytes); fwrite(buf,bytes,1,w_fd); } fclose(w_fd); int srt_close(srt_sock); srt_cleanup(); }