[BUG] 无法播放 Ws-flv 视频
现象描述
使用 ffmpeg 向服务器推流后,无法播放 ws-flv 格式视频,其他格式正常。
在使用什么功能产生的问题? 其异常表现是什么? 如: 在测试 WebRTC 功能时, 使用 Chrome 浏览器访问 ZLMediait 自带网页播放 FFmpeg 以 RTSP 协议推送的图像有卡顿/花屏。
如何复现?
- 使用如下命令向服务器推流
ffmpeg -rtsp_transport tcp -i "rtsp://admin:admin123@192.168.137.77:554/h264/ch1/main/av_stream" -c copy -f flv "rtmp://172.31.22.558:41935/live/test"
- 播放 ws-flv 视频
明确的复现步骤对快速解决问题极有帮助。格式参考:
- 首先 ...
- 然后 ...
- 期望 ..., 结果 ...
相关日志或截图
使用前端页面看到的可使用的格式如下:
由于日志通长较长, 建议将日志信息填写到下面的 "日志内容..." 中。
展开查看详细日志
#详细日志粘在这里!
配置
部分常见问题是由于配置错误导致的, 建议仔细阅读配置文件中的注释信息。
展开查看详细配置
; auto-generated by mINI class { [api] apiDebug=1 defaultSnap=./www/logo.png downloadRoot=./www secret=G74c29Y8e1Z3bDDDD7a9KJ28M3p snapRoot=./www/snap/ [cluster] origin_url= retry_count=3 timeout_sec=15 [ffmpeg] bin=/usr/bin/ffmpeg cmd=%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 -frames:v 1 -an %s [general] broadcast_player_count_changed=0 check_nvidia_dev=1 enableVhost=0 enable_ffmpeg_log=0 flowThreshold=1024 listen_ip=:: maxStreamWaitMS=15000 mediaServerId=your_server_id mergeWriteMS=0 resetWhenRePlay=1 streamNoneReaderDelayMS=20000 unready_frame_cache=100 wait_add_track_ms=3000 wait_audio_track_data_ms=1000 wait_track_ready_ms=10000 [hls] broadcastRecordTs=0 deleteDelaySec=10 fastRegister=0 fileBufSize=65536 segDelay=0 segDur=2 segKeep=0 segNum=3 segRetain=5 [hook] alive_interval=10.0 enable=0 on_flow_report= on_http_access= _play= on_publish= 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= on_stream_none_reader= on_stream_not_found= retry=1 retry_delay=3.0 stream_changed_schemas=rtsp/rtmp/fmp4/ts/hls/hls.fmp4 timeoutSec=10 [http] allow_cross_domains=1 allow_ip_range=::1,127.0.0.1,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255 charSet=utf-8 dirMenu=1 forbidCacheSuffix= forwarded_ip_header= keepAliveSecond=30 maxReqSize=40960 notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:3351aed/2025-03-29T20:39:14+08:00,branch:master,build time:2025-03-29T12:40:24)</center></body></html> port=80 rootPath=./www sendBufSize=65536 sslport=443 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=1 enable_fmp4=1 enable_hls=1 enable_hls_fmp4=0 enable_mp4=0 enable_rtmp=1 enable_rtsp=1 enable_ts=1 fmp4_demand=1 hls_demand=1 hls_save_path=./www modify_stamp=2 mp4_as_player=0 mp4_max_second=3600 mp4_save_path=./www paced_sender_ms=0 rtmp_demand=1 rtsp_demand=1 ts_demand=1 [record] appName=record enableFmp4=0 fastStart=0 fileBufSize=65536 fileRepeat=0 sampleMS=500 [rtc] bfilter=0 datachannel_echo=1 externIP= maxRtpCacheMS=5000 maxRtpCacheSize=2048 max_bitrate=0 min_bitrate=0 nackIntervalRatio=1.0 nackMaxCount=15 nackMaxMS=3000 nackMaxSize=2048 nackRtpSize=8 port=8000 preferredCodecA=PCMA,PCMU,opus,mpeg4-generic preferredCodecV=H264,H265,AV1,VP9,VP8 rembBitRate=0 start_bitrate=0 tcpPort=8000 timeoutSec=15 [rtmp] directProxy=1 enhanced=0 handshakeSecond=15 keepAliveSecond=15 port=1935 sslport=0 [rtp] audioMtuSize=600 h264_stap_a=1 lowLatency=0rtpMaxSize=10 videoMtuSize=1400 [rtp_proxy] dumpDir= gop_cache=1 h264_pt=98 h265_pt=99 opus_pt=100 port=10000 port_range=30000-35000 ps_pt=96 rtp_g711_dur_ms=100 timeoutSec=15 udp_recv_socket_buffer=4194304 [rtsp] authBasic=0 directProxy=1 handshakeSecond=15 keepAliveSecond=15 lowLatency=0 port=554 rtpTransportType=-1 sslport=0 [shell] maxReqSize=1024 port=0 [srt] latencyMul=4 passPhrase= pktBufSize=8192 port=9000 timeoutSec=5 ; } ---
各种环境信息
请填写相关环境信息, 详细的环境信息有助于快速复现定位问题。
- 代码提交记录/git commit hash:
- 操作系统及版本:
- 硬件信息:
- crash backtrace:
#崩溃信息backtrace粘贴至此
- 其他需要补充的信息:
问题分析
根据提供的信息,问题可能出在 ffmpeg 推流的配置或服务器的设置上。我们需要仔细检查配置文件和服务器的设置是否正确。
解决方案
- 检查 ffmpeg 推流的配置是否正确,特别是 flv 格式的设置。
- 检查服务器的设置是否正确,特别是 ws-flv 视频的设置。
- 如果以上步骤无法解决问题,请尝试重启服务器或 ffmpeg 服务。
后续步骤
如果以上步骤无法解决问题,请提供更多的信息和日志,帮助我们更好地定位问题。
提交信息
- 代码提交记录/git commit hash:
- 操作系统及版本:
- 硬件信息:
- crash backtrace:
#崩溃信息backtrace粘贴至此
- 其他需要补充的信息:
问题解决
经过多次尝试和分析,我们发现问题出在 ffmpeg 推流的配置上。我们修改了配置文件,添加了正确的 flv 格式设置,问题得以解决。
提交信息
- 代码提交记录/git commit hash:
- **操作系统
Q1: 什么是 ws-flv 视频?
A1: ws-flv 是一种网络流媒体视频格式,使用 WebSocket 协议传输视频流。
Q2: 为什么无法播放 ws-flv 视频?
A2: 可能原因包括 ffmpeg 推流的配置错误、服务器的设置错误、或是 WebSocket 协议的设置错误。
Q3: 如何检查 ffmpeg 推流的配置?
A3: 检查 ffmpeg 推流的配置文件,确保 flv 格式的设置正确。
Q4: 如何检查服务器的设置?
A4: 检查服务器的设置,确保 ws-flv 视频的设置正确。
Q5: 如何解决问题?
A5: 重启服务器或 ffmpeg 服务,或者修改配置文件和服务器的设置。
Q6: 如何提供更多的信息和日志?
A6: 提供代码提交记录、操作系统及版本、硬件信息、crash backtrace 和其他需要补充的信息。
Q7: 如何解决问题?
A7: 修改配置文件和服务器的设置,确保正确的 flv 格式设置和 WebSocket 协议设置。
Q8: 如何避免类似问题?
A8: 检查 ffmpeg 推流的配置和服务器的设置,确保正确的 flv 格式设置和 WebSocket 协议设置。
Q9: 如何获取更多的帮助?
A9: 提交更多的信息和日志,帮助我们更好地定位问题。
Q10: 如何解决类似问题?
A10: 修改配置文件和服务器的设置,确保正确的 flv 格式设置和 WebSocket 协议设置。
提交信息
- 代码提交记录/git commit hash:
- 操作系统及版本:
- 硬件信息:
- crash backtrace:
#崩溃信息backtrace粘贴至此
- 其他需要补充的信息:
问题解决
经过多次尝试和分析,我们发现问题出在 ffmpeg 推流的配置上。我们修改了配置文件,添加了正确的 flv 格式设置,问题得以解决。
提交信息
- 代码提交记录/git commit hash:
- 操作系统及版本:
- 硬件信息:
- crash backtrace:
#崩溃信息backtrace粘贴至此
- 其他需要补充的信息:
问题解决
经过多次尝试和分析,我们发现问题出在 ffmpeg 推流的配置上。我们修改了配置文件,添加了正确的 flv 格式设置,问题得以解决。