[BUG] 无法播放 Ws-flv 视频

by ADMIN 21 views

现象描述

使用 ffmpeg 向服务器推流后,无法播放 ws-flv 格式视频,其他格式正常。

在使用什么功能产生的问题? 其异常表现是什么? 如: 在测试 WebRTC 功能时, 使用 Chrome 浏览器访问 ZLMediait 自带网页播放 FFmpeg 以 RTSP 协议推送的图像有卡顿/花屏。

如何复现?

  1. 使用如下命令向服务器推流 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"
  2. 播放 ws-flv 视频

明确的复现步骤对快速解决问题极有帮助。格式参考:

  1. 首先 ...
  2. 然后 ...
  3. 期望 ..., 结果 ...

相关日志或截图

使用前端页面看到的可使用的格式如下:

Image

由于日志通长较长, 建议将日志信息填写到下面的 "日志内容..." 中。

展开查看详细日志
#详细日志粘在这里!

配置

部分常见问题是由于配置错误导致的, 建议仔细阅读配置文件中的注释信息。

展开查看详细配置
; 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 推流的配置或服务器的设置上。我们需要仔细检查配置文件和服务器的设置是否正确。

解决方案

  1. 检查 ffmpeg 推流的配置是否正确,特别是 flv 格式的设置。
  2. 检查服务器的设置是否正确,特别是 ws-flv 视频的设置。
  3. 如果以上步骤无法解决问题,请尝试重启服务器或 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 格式设置,问题得以解决。