ZLMediaKit / ZLMediaKit

WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C++11
https://docs.zlmediakit.com
Other
14.53k stars 3.55k forks source link

[BUG] 20分钟左右的视频,生成的录播为2个小时,帧率为3帧左右 #4138

Closed daqungege closed 2 days ago

daqungege commented 5 days ago

Phenomenon Description

使用webrtc推流直播功能,视频直播录制,直播推流开始到结束大概持续20分钟左右,生成的视频最后为2个小时,帧率为3帧左右,20分钟的视频拉长到2个小时

How to reproduce?

Related logs or screenshots

视频信息:

Image

Image

回调信息 {"app":"live","file_name":"10-01-41-0.mp4","file_path":"/home/airdwing/media/www/record/live/1863855641139818498/2025-02-04/10-01-41-0.mp4","file_size":360133010,"fold":null,"mediaServerId":"your_server_id","start_time":1738634501,"stream":"1863855641139818498","time_len":8508,"url":"record/live/1863855641139818498/2025-02-04/10-01-41-0.mp4","vhost":"defaultVhost"}

Expand to view detailed logs

```
2025-02-04 10:20:28.342 T [MediaServer] [1-event poller 26] TcpClient.cpp:84 startConnect | mediakit::HttpRequester-30469 start connect 172.16.10.12:9996
2025-02-04 10:20:28.342 I [MediaServer] [1-event poller 26] MediaSource.cpp:498 emitEvent | 媒体注销:rtmp://__defaultVhost__/live/1863855641139818498
2025-02-04 10:20:28.342 D [MediaServer] [1-event poller 26] WebApi.cpp:274 http api debug | 
# request:
POST /index/api/close_streams
# header:
Connection : close
Content-Length : 131
Content-Type : application/json
Host : 36.137.183.74:8081
HTTP2-Settings : AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
User-Agent : Java-http-client/11.0.21
X-Real-IP : 36.137.183.74
# content:
{"secret":"airdwing-media-pri6-0918-89919954125w","stream":"1863855641139818498","vhost":"__defaultVhost__","app":"live","force":1}
# response:
{
    "code" : 0,
    "count_closed" : 5,
    "count_hit" : 5
}

2025-02-04 10:20:28.344 T [MediaServer] [1-event poller 21] TcpClient.cpp:94 onSockConnect | mediakit::HttpRequester-30467 connect result: 0(success)
2025-02-04 10:20:28.346 I [MediaServer] [1-event poller 26] WebRtcTransport.cpp:1284 removeTuple | rBAKDB9BH0E=_163 remove tuple 111.35.231.123:12265
2025-02-04 10:20:28.346 I [MediaServer] [1-event poller 26] WebRtcTransport.cpp:203 OnIceServerDisconnected | rBAKDB9BH0E=_163
2025-02-04 10:20:28.346 W [MediaServer] [1-event poller 26] WebRtcPusher.cpp:133 onDestory | RTC推流器(__defaultVhost__/live/1863855641139818498)结束推流,耗时(s):1127
```

Configuration

Please expand to view detailed configuration

```ini
[rtc]
#rtc播放推流、播放超时时间
timeoutSec=15
#本机对rtc客户端的可见ip,作为服务器时一般为公网ip,可有多个,用','分开,当置空时,会自动获取网卡ip
#同时支持环境变量,以$开头,如"$EXTERN_IP"; 请参考:https://github.com/ZLMediaKit/ZLMediaKit/pull/1786
externIP=ip
#rtc udp服务器监听端口号,所有rtc客户端将通过该端口传输stun/dtls/srtp/srtcp数据,
#该端口是多线程的,同时支持客户端网络切换导致的连接迁移
#需要注意的是,如果服务器在nat内,需要做端口映射时,必须确保外网映射端口跟该端口一致
port=8001
#rtc tcp服务器监听端口号,在udp 不通的情况下,会使用tcp传输数据
#该端口是多线程的,同时支持客户端网络切换导致的连接迁移
#需要注意的是,如果服务器在nat内,需要做端口映射时,必须确保外网映射端口跟该端口一致
tcpPort=8001
#设置remb比特率,非0时关闭twcc并开启remb。该设置在rtc推流时有效,可以控制推流画质
#目前已经实现twcc自动调整码率,关闭remb根据真实网络状况调整码率
rembBitRate=0
#rtc支持的音频codec类型,在前面的优先级更高
#以下范例为所有支持的音频codec
preferredCodecA=PCMA,PCMU,opus,mpeg4-generic
#rtc支持的视频codec类型,在前面的优先级更高
#以下范例为所有支持的视频codec
preferredCodecV=H264,H265,AV1,VP9,VP8

#webrtc比特率设置
start_bitrate=0
max_bitrate=0
min_bitrate=0

#nack接收端
#Nack缓存包最早时间间隔
maxNackMS=5000
#Nack包检查间隔(包数量)
rtpCacheCheckInterval=100

#nack发送端
#最大保留的rtp丢包状态个数
nackMaxSize=2048
#rtp丢包状态最长保留时间
nackMaxMS=3000
#nack最多请求重传次数
nackMaxCount=15
#nack重传频率,rtt的倍数
nackIntervalRatio=1.0
#nack包中rtp个数,减小此值可以让nack包响应更灵敏
nackRtpSize=8
```

Various environment information

版本编译时间:

编译日期: 2024-12-13T10:35:05 代码日期: %aI 当前git分支: master 当前git hash值: 72c2859

#Paste the crash information backtrace here

现象描述

使用webrtc推流直播功能,视频直播录制,直播推流开始到结束大概持续20分钟左右,生成的视频最后为2个小时,帧率为3帧左右,20分钟的视频拉长到2个小时

如何复现?

相关日志或截图

视频信息:

Image 回调信息 {"app":"live","file_name":"10-01-41-0.mp4","file_path":"/home/airdwing/media/www/record/live/1863855641139818498/2025-02-04/10-01-41-0.mp4","file_size":360133010,"fold":null,"mediaServerId":"your_server_id","start_time":1738634501,"stream":"1863855641139818498","time_len":8508,"url":"record/live/1863855641139818498/2025-02-04/10-01-41-0.mp4","vhost":"defaultVhost"}

展开查看详细日志

```
2025-02-04 10:20:28.342 T [MediaServer] [1-event poller 26] TcpClient.cpp:84 startConnect | mediakit::HttpRequester-30469 start connect 172.16.10.12:9996
2025-02-04 10:20:28.342 I [MediaServer] [1-event poller 26] MediaSource.cpp:498 emitEvent | 媒体注销:rtmp://__defaultVhost__/live/1863855641139818498
2025-02-04 10:20:28.342 D [MediaServer] [1-event poller 26] WebApi.cpp:274 http api debug | 
# request:
POST /index/api/close_streams
# header:
Connection : close
Content-Length : 131
Content-Type : application/json
Host : 36.137.183.74:8081
HTTP2-Settings : AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
User-Agent : Java-http-client/11.0.21
X-Real-IP : 36.137.183.74
# content:
{"secret":"airdwing-media-pri6-0918-89919954125w","stream":"1863855641139818498","vhost":"__defaultVhost__","app":"live","force":1}
# response:
{
    "code" : 0,
    "count_closed" : 5,
    "count_hit" : 5
}

2025-02-04 10:20:28.344 T [MediaServer] [1-event poller 21] TcpClient.cpp:94 onSockConnect | mediakit::HttpRequester-30467 connect result: 0(success)
2025-02-04 10:20:28.346 I [MediaServer] [1-event poller 26] WebRtcTransport.cpp:1284 removeTuple | rBAKDB9BH0E=_163 remove tuple 111.35.231.123:12265
2025-02-04 10:20:28.346 I [MediaServer] [1-event poller 26] WebRtcTransport.cpp:203 OnIceServerDisconnected | rBAKDB9BH0E=_163
2025-02-04 10:20:28.346 W [MediaServer] [1-event poller 26] WebRtcPusher.cpp:133 onDestory | RTC推流器(__defaultVhost__/live/1863855641139818498)结束推流,耗时(s):1127
```

配置

展开查看详细配置

```ini
[rtc]
#rtc播放推流、播放超时时间
timeoutSec=15
#本机对rtc客户端的可见ip,作为服务器时一般为公网ip,可有多个,用','分开,当置空时,会自动获取网卡ip
#同时支持环境变量,以$开头,如"$EXTERN_IP"; 请参考:https://github.com/ZLMediaKit/ZLMediaKit/pull/1786
externIP=ip
#rtc udp服务器监听端口号,所有rtc客户端将通过该端口传输stun/dtls/srtp/srtcp数据,
#该端口是多线程的,同时支持客户端网络切换导致的连接迁移
#需要注意的是,如果服务器在nat内,需要做端口映射时,必须确保外网映射端口跟该端口一致
port=8001
#rtc tcp服务器监听端口号,在udp 不通的情况下,会使用tcp传输数据
#该端口是多线程的,同时支持客户端网络切换导致的连接迁移
#需要注意的是,如果服务器在nat内,需要做端口映射时,必须确保外网映射端口跟该端口一致
tcpPort=8001
#设置remb比特率,非0时关闭twcc并开启remb。该设置在rtc推流时有效,可以控制推流画质
#目前已经实现twcc自动调整码率,关闭remb根据真实网络状况调整码率
rembBitRate=0
#rtc支持的音频codec类型,在前面的优先级更高
#以下范例为所有支持的音频codec
preferredCodecA=PCMA,PCMU,opus,mpeg4-generic
#rtc支持的视频codec类型,在前面的优先级更高
#以下范例为所有支持的视频codec
preferredCodecV=H264,H265,AV1,VP9,VP8

#webrtc比特率设置
start_bitrate=0
max_bitrate=0
min_bitrate=0

#nack接收端
#Nack缓存包最早时间间隔
maxNackMS=5000
#Nack包检查间隔(包数量)
rtpCacheCheckInterval=100

#nack发送端
#最大保留的rtp丢包状态个数
nackMaxSize=2048
#rtp丢包状态最长保留时间
nackMaxMS=3000
#nack最多请求重传次数
nackMaxCount=15
#nack重传频率,rtt的倍数
nackIntervalRatio=1.0
#nack包中rtp个数,减小此值可以让nack包响应更灵敏
nackRtpSize=8
```

各种环境信息

编译信息: centos 6 运行环境: Intel Xeon Processor 32 C 64G 版本编译时间:

编译日期: 2024-12-13T10:35:05 代码日期: %aI 当前git分支: master 当前git hash值: 72c2859

#崩溃信息backtrace粘贴至此

TRANS_BY_GITHUB_AI_ASSISTANT

xiongguangjie commented 4 days ago

这个是webrtc 推流的时间戳有问题吧,chrome 浏览器webrtc 推流会出现类似的情况吗

daqungege commented 4 days ago

这个是webrtc 推流的时间戳有问题吧,chrome 浏览器webrtc 推流会出现类似的情况吗

我们后边又重新推拉流一次之后,未出现类似情况。麻烦问下,什么情况下会出现这种情况?

这个是webrtc 推流的时间戳有问题吧,chrome 浏览器webrtc 推流会出现类似的情况吗

我们后边又重新推拉流一次之后,未出现类似情况。麻烦问下,什么情况下会出现这种情况?

TRANS_BY_GITHUB_AI_ASSISTANT

xiongguangjie commented 4 days ago

我们后边又重新推拉流一次之后,未出现类似情况。麻烦问下,什么情况下会出现这种情况?

推流的时间戳不正确就会导致出现这种情况

我们后边又重新推拉流一次之后,未出现类似情况。麻烦问下,什么情况下会出现这种情况?

推流的时间戳不正确就会导致出现这种情况

TRANS_BY_GITHUB_AI_ASSISTANT

daqungege commented 4 days ago

时间戳不正确就会导致出现这种情况

麻烦问下推理时间戳不正确是指比当前时间快了还是慢了?

时间戳不正确就会导致出现这种情况

麻烦问下推理时间戳不正确是指比当前时间快了还是慢了?

TRANS_BY_GITHUB_AI_ASSISTANT

daqungege commented 4 days ago

时间戳不正确就会导致出现这种情况

麻烦问下推理时间戳不正确是指比当前时间快了还是慢了?

时间戳不正确就会导致出现这种情况

麻烦问下推理时间戳不正确是指比当前时间快了还是慢了?

TRANS_BY_GITHUB_AI_ASSISTANT

Image

daqungege commented 4 days ago

视频前十几秒时正常帧

xiongguangjie commented 4 days ago

视频前十几秒时正常帧

这个日志看不出来,只能抓包或者二开打印日志排查,根据你的描述,应该是时间戳慢了

视频前十几秒时正常帧

这个日志看不出来,只能抓包或者二开打印日志排查,根据你的描述,应该是时间戳慢了

TRANS_BY_GITHUB_AI_ASSISTANT

daqungege commented 2 days ago

视频前十几秒时正常帧

这个日志看不出来,只能抓包或者二开打印日志排查,根据你的描述,应该是时间戳慢了

视频前十几秒时正常帧

这个日志看不出来,只能抓包或者二开打印日志排查,根据你的描述,应该是时间戳慢了

TRANS_BY_GITHUB_AI_ASSISTANT

谢谢,我们再排查下