rtmp推流超时时间不起作用 linux srs_librtmp srs_rtmp_set_timeout setsockopt 设置超时时间 失败 返回error 2

最近在调试rtmp推流 用的是srs_librtmp.cpp这个开源库 

调试过程中发现 如果正常推流过程中,突然rtmp服务器ping不通的话 会导致 程序卡死在

srs_h264_write_raw_frames 这个函数中 ,跟踪到最后发现是 在这个函数 srs_hijack_io_writev中

卡死在::writev这个函数里面了  一直不返回  

但是这个过程中如果rtmp服务器恢复的话,这个函数又可以正常返回了,

后来发现 rmtp库 提供了一个 srs_rtmp_set_timeout  这个函数可以设置超时时间 

但是 跟踪下来发现 setsockopt 这个api 返回-1   errorn 为2   百度了一下 错误码2 的意思是 ENOENT(No such file or directory)搞不明白为什么 

这样会导致 推流过程中 rtmp服务器突然中断的话 程序 阻塞在那  并且不能正常结束 。

百度了也没发现 合适的解决方案。。。。

之前已经解决这个问题了  忘记更新了 今天2021.12.28 贴出来记录下

原因就是 linux和 windows系统下api所需要的参数的类型不太一样 

windows需要一个DWORD的值   而linux需要传递一个struct timeval类型的结构体 

代码如下 :

 send函数也是如此 :

可以看下tv那个不同平台下的类型 是不一样的  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`srs_h264_write_raw_frames` 是 srs-librtmp 库中的一个函数,用于将 H.264 原始帧数据写入到 RTMP 流中。 函数原型如下: ```c++ int srs_h264_write_raw_frames(srs_rtmp_t rtmp, char* frames, int frames_size, uint32_t dts, uint32_t pts); ``` 参数说明: - `rtmp`:RTMP 推流客户端对象。 - `frames`:H.264 原始帧数据。 - `frames_size`:H.264 原始帧数据的大小。 - `dts`:帧的 DTS 时间戳。 - `pts`:帧的 PTS 时间戳。 该函数会将 H.264 原始帧数据封装成 NALU 格式,并写入到 RTMP 流中。在使用该函数前,需要先调用 `srs_librtmp_create` 创建 RTMP 推流客户端对象,并通过 `srs_librtmp_set_video_*` 等函数设置视频相关参数。 以下是一个示例代码,演示了如何使用 `srs_h264_write_raw_frames` 函数将 H.264 原始帧数据写入到 RTMP 流中: ```c++ #include <srs_librtmp.h> int main() { // 初始化 srs-librtmpsrs_librtmp_context_t rtmp = srs_librtmp_create("rtmp://example.com/live/stream"); // 设置推流参数 srs_librtmp_set_video_resolution(rtmp, 640, 480); srs_librtmp_set_video_framerate(rtmp, 30); // 发送 H.264 数据 uint8_t* h264_data = ...; // 假设这是 H.264 数据 int h264_size = ...; // 假设这是 H.264 数据的大小 uint32_t dts = ...; // 帧的 DTS 时间戳 uint32_t pts = ...; // 帧的 PTS 时间srs_h264_write_raw_frames(rtmp, h264_data, h264_size, dts, pts); // 释放资源 srs_librtmp_destroy(rtmp); return 0; } ``` 在实际使用中,你需要根据自己的业务逻辑,不断调用 `srs_h264_write_raw_frames` 函数将 H.264 数据写入到 RTMP 流中。同时,你还需要处理音频数据的推流

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QMCY_jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值