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.58k stars 3.55k forks source link

[BUG] 部分情况无法录制MP4 #4091

Closed yand9807 closed 1 month ago

yand9807 commented 1 month ago

现象描述

zlmediakit在配置中开启自动录制mp4文件,通过whip推送了一路视频流到zlmediakit,断流后没有录制出视频文件。看日志似乎有一个报错:WebRtcSession.cpp:113 onError | 2-36(10.0.0.2:2269) 1(end of file)

如何复现?

  1. 在配置文件设置 enable_mp4=1
  2. 通过whip协议推送一路webrtc流到zlmediakit
  3. 录制一丢按时间后停止推流
  4. 没有产生MP4文件,也没有触发on_mp4_record事件
  5. 观察日志发现有报错 WebRtcSession.cpp:113 onError | 2-36(10.0.0.2:2269) 1(end of file)

相关日志或截图

展开查看详细日志

```
![微信图片_20241230201133](https://github.com/user-attachments/assets/f40687aa-1961-4c79-90ad-13bc88b9908b)

```

配置

展开查看详细配置

```ini
[root@dev-server-44 media]# cat conf/config.ini 
; auto-generated by mINI class {

[api]
apiDebug=0
defaultSnap=
secret=035c73f7-bb6b-4889-a715-d9eb2d1925c1
snapRoot=./www/snap/

[cluster]
origin_url=
retry_count=3
timeout_sec=15

[ffmpeg]
bin=/usr/bin/ffmpeg
cmd=%s -re -i %s -an -vf scale=1280:720 -c:v libx264 -rtsp_transport tcp  -f flv %s
cmd2=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
log=./ffmpeg/ffmpeg.log
restart_sec=0
snap=%s -i %s -y -f mjpeg -t 0.001 %s

[general]
check_nvidia_dev=1
enableVhost=0
enable_ffmpeg_log=0
flowThreshold=1024
maxStreamWaitMS=15000
mediaServerId=GyorMepTMeq5vSIo
mergeWriteMS=0
resetWhenRePlay=1
streamNoneReaderDelayMS=10000
unready_frame_cache=100
wait_add_track_ms=3000
wait_track_ready_ms=10000

[hls]
broadcastRecordTs=0
deleteDelaySec=10
fileBufSize=65536
segDur=2
segKeep=0
segNum=3
segRetain=5

[hook]
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925c1
alive_interval=10.0
enable=1
on_flow_report=
on_http_access=
on_play=
on_publish=
on_record_mp4=http://192.168.100.28:81/api/ms/hook/on_record_mp4
on_record_ts=
on_rtp_server_timeout=
on_rtsp_auth=
on_rtsp_realm=
on_send_rtp_stopped=
on_server_exited=
on_server_keepalive=
on_server_started=
on_shell_login=
on_stream_changed=http://192.168.100.28:81/api/ms/hook/on_stream_changed
on_stream_none_reader=
on_stream_not_found=
retry=1
retry_delay=3.0
timeoutSec=10

[http]
allow_cross_domains=1
charSet=utf-8
dirMenu=1
forbidCacheSuffix=
forwarded_ip_header=
keepAliveSecond=30
maxReqSize=40960
notFound=404 Not Found

您访问的资源不存在!


ZLMediaKit(git hash:4e33f5b/2023-07-10T10:53:02+08:00,branch:master,build time:2023-07-10T02:55:19)
port=8088 rootPath=./www sendBufSize=65536 sslport=8089 virtualPath= [multicast] addrMax=239.255.255.255 addrMin=239.0.0.0 udpTTL=64 [protocol] add_mute_audio=1 auto_close=0 continue_push_ms=15000 enable_audio=0 enable_fmp4=1 enable_hls=0 enable_hls_fmp4=0 #开启录制mp4 enable_mp4=1 enable_rtmp=1 enable_rtsp=1 enable_ts=1 fmp4_demand=0 hls_demand=0 hls_save_path=./www modify_stamp=1 mp4_as_player=0 #mp4切片大小,单位秒 mp4_max_second=3600 #MP4录制文件保存路径 mp4_save_path=./www/ rtmp_demand=0 rtsp_demand=0 ts_demand=0 [record] appName=record fastStart=0 fileBufSize=65536 fileRepeat=1 sampleMS=500 #MP4录制写文件格式是否采用fmp4,启用的话,断电未完成录制的文件也能正常打开 enableFmp4=0 [rtc] externIP=172.16.9.45 port=8000 preferredCodecA=PCMU,PCMA,opus,mpeg4-generic preferredCodecV=H264,H265,AV1,VP9,VP8 rembBitRate=0 tcpPort=8000 timeoutSec=15 [rtmp] handshakeSecond=15 keepAliveSecond=15 modifyStamp=0 port=1935 sslport=19350 [rtp] audioMtuSize=600 h264_stap_a=1 lowLatency=0 rtpMaxSize=10 videoMtuSize=1400 [rtp_proxy] dumpDir=./www/dump/ gop_cache=1 h264_pt=98 h265_pt=99 opus_pt=100 port=10000 port_range=30000-35000 ps_pt=96 timeoutSec=15 [rtsp] authBasic=0 directProxy=1 handshakeSecond=15 keepAliveSecond=15 lowLatency=0 port=554 rtpTransportType=-1 sslport=5540 [shell] maxReqSize=1024 port=0 [srt] latencyMul=4 pktBufSize=8192 port=9000 timeoutSec=5 ; } --- ```

各种环境信息