FFServer 从 Logitech C920 流式传输 H.264

FFServer 从 Logitech C920 流式传输 H.264

ffmpeg我在尝试使用/进行 H.264 编码的 Logitech C920 网络摄像头实现网络直播时遇到了一些麻烦ffserver

这是我使用的配置文件ffserver

# Port on which the server is listening. You must select a different
# port from your standard HTTP web server if it is running on the same
# computer.
Port 8090

# Address on which the server is bound. Only useful if you have
# several network interfaces.
BindAddress 0.0.0.0

# Number of simultaneous HTTP connections that can be handled. It has
# to be defined *before* the MaxClients parameter, since it defines the
# MaxClients maximum limit.
MaxHTTPConnections 2000

# Number of simultaneous requests that can be handled. Since FFServer
# is very fast, it is more likely that you will want to leave this high
# and use MaxBandwidth, below.
MaxClients 1000

# This the maximum amount of kbit/sec that you are prepared to
# consume when streaming to clients.
MaxBandwidth 1000

# Access log file (uses standard Apache log file format)
# '-' is the standard output.
CustomLog -

##################################################################
# Definition of the live feeds. Each live feed contains one video
# and/or audio sequence coming from an ffmpeg encoder or another
# ffserver. This sequence may be encoded simultaneously with several
# codecs at several resolutions.

<Feed feed.ffm>

# You must use 'ffmpeg' to send a live feed to ffserver. In this
# example, you can type:
#

File /tmp/feed.ffm
FileMaxSize 100M

# You could specify
# ReadOnlyFile /saved/specialvideo.ffm
# This marks the file as readonly and it will not be deleted or updated.

# Only allow connections from localhost to the feed.
ACL allow 127.0.0.1

</Feed>


##################################################################
# Now you can define each stream which will be generated from the
# original audio and video stream. Each format has a filename (here
# 'test1.mpg'). FFServer will send this stream when answering a
# request containing this filename.

<stream stream.mp4>

Feed feed.ffm
Format mp4

# Audio settings
NoAudio

# Video Settings
#VideoSize 1280x720                      # Video resolution
#VideoFrameRate 30                      # Video FPS
#AVOptionVideo flags +global_header          # Parameters passed to encoder
#AVOptionVideo cpu-used 0
#AVOptionVideo qmin 10
#AVOptionVideo qmax 42
#AVOptionVideo quality good
PreRoll 0
StartSendOnKey
#VideoBitRate 400                      # Video bitrate

</stream>

# Server status

<Stream stat.html>
Format status

# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255

</Stream>

这是我通过命令行发出的命令和相应的输出:

$ ffmpeg -s 1280x720 -f video4linux2 -r 30 -vcodec h264 -re -i /dev/video0 \
    -copyinkf -codec copy h**p://localhost:8090/feed.ffm

ffmpeg version N-67036-g04a4fb8 Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct 20 2014 17:39:50 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-gpl --enable-libx264
  libavutil      54. 10.100 / 54. 10.100
  libavcodec     56.  8.102 / 56.  8.102
  libavformat    56.  9.101 / 56.  9.101
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  2.100 /  5.  2.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 12614.859199, bitrate: N/A
    Stream #0:0: Video: h264 (Constrained Baseline), yuvj420p(pc), 1280x720 [SAR 1:1 DAR 16:9], -5 kb/s, 30 fps, 30 tbr, 1000k tbn, 60 tbc
Output #0, ffm, to 'h**p://localhost:8090/feed.ffm':
  Metadata:
    creation_time   : now
    encoder         : Lavf56.9.101
    Stream #0:0: Video: h264, yuvj420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, -5 kb/s, 30 fps, 1000k tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 0, current: -166263; changing to 1. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 1, current: -134365; changing to 2. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 2, current: -102381; changing to 3. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 3, current: -66434; changing to 4. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 4, current: -34548; changing to 5. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 5, current: -2645; changing to 6. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 232857, current: 138514; changing to 232858. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 232858, current: 167942; changing to 232859. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 232859, current: 197415; changing to 232860. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 232860, current: 227037; changing to 232861. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 997959, current: 938599; changing to 997960. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 997960, current: 995052; changing to 997961. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 1240745, current: 1232841; changing to 1240746. This may result in incorrect timestamps in the output file.
[ffm @ 0x28c7ea0] Non-monotonous DTS in output stream 0:0; previous: 1293561, current: 1282157; changing to 1293562. This may result in incorrect timestamps in the output file.
frame=   69 fps= 34 q=-1.0 Lsize=     912kB time=00:00:02.01 bitrate=3702.1kbits/s

例如,当我尝试使用 VLC 播放流时 - vlc h**p://localhost:8090/stream.mp4- 我收到以下错误:

[00007f5234003948]核心流错误:无法预填充缓冲区

我也无法在网络浏览器端观看流。

有人可以给我一个提示吗?

答案1

我一直在使用您的配置在我的 OpenWRT 路由器(TP-Link WDR3600,MIPS cpu,560 mHz)上使用 ffmpeg 和罗技 C920 摄像头。在 640x480 及以上分辨率下,我的系统无法可靠运行。我尝试单独启动 ffmpeg 而不进行转码(我的路由器根本无法进行任何转码,CPU 太弱)并使用 VLC 观看流:

ffmpeg -f v4l2 -input_format h264 -video_size 320x400 -i /dev/video0 -copyinkf -codec copy -f mpegts udp://192.168.1.100:20000

640x480 的视频会失真,800x600 或更高的分辨率根本不起作用,ffmpeg 会给出大量“非单调 DTS ...”消息。 320x400 就可以了。 MJPEG 视频输出效果更好,我能够以 1920x1080 和 15 fps 运行 C920,数据速率高于 50 Mbit/s,但 MJPEG 也不是 100% 无错误。看起来相机在 H264 上有一些问题,至少在 ffmpeg 上是这样。在 H264 下,无论我尝试设置哪种分辨率/帧速率,相机都能提供大约 3.2 Mbit/s 的恒定比特率。

但回到正题。为了让 h264 与 ffserver 一起工作,我修改了您的 Feed 部分,通过更改“Format”并注释掉“stream”部分中的 StartSendOnKey:

格式化 mpegt
...
#StartSendOnKey

通过在“Feed”部分添加 ffmpeg“Launch”字符串:

启动 ffmpeg -f v4l2 -input_format h264 -video_size 320x400 -i /dev/video0 -copyinkf -codec 复制

并将 MaxBandwidth 更改为 50000

我使用vlc作为客户端软件。

答案2

我正在使用此配置,并且它运行良好 server.conf 文件:

HTTPPort 1235
RTSPPort 1234
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 100000
#CustomLog –
#########################################
## usb cam:  logitec c920
#########################################
<Feed camfeed.ffm>
    File /tmp/camfeed.ffm
    FileMaxSize 500K
    #allow only localhost to publish feed
    ACL allow 192.168.1.149
</Feed>


<Stream usbcam.mov>
    Feed camfeed.ffm
    Format rtp

    #cam defaults:
    VideoSize 800x600
    VideoFrameRate 24
    VideoBitRate 400
    VideoCodec libx264

    NoLoop
    NoAudio
    Preroll 0
    StartSendOnKey
</Stream>

######################################
# ffmpeg cmd:
######################################
# ffmpeg -y -s 800x600 -f video4linux2 -i /dev/video0 -c:v libx264 -tune zerolatency -an http://192.168.1.149:1235/camfeed.ffm

相关内容