ffmpeg - VLC:无法使用 FFMPEG 打开 H265 的 SDP 文件

标签 ffmpeg video-streaming vlc h.265

我使用以下命令使用 rtp 和 ffmpeg 流式传输实时视频:

ffmpeg -re -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx265 -tune zerolatency -s 320x240 -preset ultrafast -pix_fmt yuv420p -r 10 -strict experimental -f rtp rtp://127.0.0.1:49170 > ffmpeg.sdp

生成的sdp文件为:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 56.36.100
m=video 49170 RTP/AVP 96
a=rtpmap:96 H265/9000

Vlc 给出以下错误:

无法检测“file:///home/username/ffmpeg.sdp”的格式。查看日志以了解详细信息。

终端出现以下错误:

[0xaf801010] ps demux error: cannot peek
[0xaf801010] mjpeg demux error: cannot peek
[0xaf801010] mpgv demux error: cannot peek
[0xaf801010] ps demux error: cannot peek
[0xb6d00618] main input error: no suitable demux module for `file/:///home/username/ffmpeg.sdp'

如果我只是在命令中更改 libx265 -> libx264 和 H265 -> H264,则流运行得很好。

但是我需要在 H265 上进行流式传输。有什么建议吗?

最佳答案

我猜问题是因为 VLC(或 ffplay)无法获取 VPS、SPS、PPS 帧。 为了开始解码 H265 流,您需要一个 VPS、一个 SPS、一个 PPS 和一个 IDR 帧。

为了要求 libx265 在每个 IDR 帧之前重复这些配置帧,您可以添加到流命令中:

-x265-params keyint=30:repeat-headers=1

然后命令变成:

ffmpeg -re -f v4l2 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx265 -tune zerolatency -x265-params keyint=30:repeat-headers=1 -s 320x240 -preset ultrafast -pix_fmt yuv420p -r 10 -strict experimental -f rtp rtp://127.0.0.1:49170 > ffmpeg.sdp

它生成以下 ffmpeg.sdp 文件:

SDP: 
v=0 
o=- 0 0 IN IP4 127.0.0.1 
s=No Name c=IN IP4 127.0.0.1 
t=0 0 
a=tool:libavformat 56.36.100 
m=video 49170 RTP/AVP 96 
a=rtpmap:96 H265/90000

我能够使用 ffplay ffmpeg.sdp 显示流和VLC ffmpeg.sdp (删除 SDP: 的第一行 ffmpeg.sdp )

关于ffmpeg - VLC:无法使用 FFMPEG 打开 H265 的 SDP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32265959/

相关文章:

apache-flex - 将过滤器应用于发布到媒体服务器的摄像机视频流

android - 在仅限 LAN 的环境中使用 Android 设备进行直播

bash - 在 Docker 镜像中运行 vlc 以通过 rtsp 协议(protocol)发送视频流

ffmpeg - 如何在 FFmpeg 中使用受限/上限比特率模式

c++ - 如何在 C++ 中读取文本文件?

FFmpeg 在音频开头添加点击

windows-phone-8 - 为什么YouTube Player可以在Windows Phone的IE上播放?

video - 调试由 VLC 但不是由 ffplay 打开的 MP4

vlc - 如何为 VLC 设置 HTTP 用户代理?

ffmpeg 故意丢帧以降低文件大小