การกำหนดค่า ffserver เพื่อจัดการกระแสข้อมูล webm ขนาดใหญ่


2

ฉันกำลังตั้งค่า ffserver สำหรับสตรีมกล้องวงจรปิดด้วยกล้อง 16 ตัว - ทุกช่องมีการสตรีมด้วยการกำหนดค่าเช่น:

<Feed 0.ffm>
File /tmp/0.ffm
FileMaxSize 5M
ACL allow 10.1.2.2
</Feed>

<Feed 0_webm.ffm>
File /tmp/0_webm.ffm
FileMaxSize 5M
ACL allow localhost
</Feed>

<Stream 0.mpg>
Feed 0.ffm
Format mpeg1video
NoAudio
VideoFrameRate 24
VideoBitRate 256
VideoSize 320x240
VideoBufferSize 40
VideoGopSize 12
</Stream>

<Stream 0.webm>
Feed 0_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 320x240
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate 500K
</Stream>

และการเรียก ffmpeg ที่เกี่ยวข้องที่ทำในกระบวนการพุ่งพรวด:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://10.1.2.1:8090/0.ffm

และ

ffmpeg -f mpegvideo -i http://localhost:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm

อย่างไรก็ตามเมื่อพูดถึงภาพรวมกริด 4x4 ขนาดใหญ่ของทุกช่องทางฉันมีปัญหากับการกำหนดค่า ffserver.conf การใช้การเรียก ffmpeg นี้ทำให้เป็น daemon ฉันสามารถจัดการ 24-25 FPS ได้อย่างน่าเชื่อถือ (และทดสอบว่าสามารถใช้งานได้ด้วยการบันทึกลงในไฟล์ในเครื่องและเล่นผ่าน ffplay):

ffmpeg -i http://localhost:8090/0.webm -i http://localhost:8090/1.webm -i http://localhost:8090/2.webm -i http://localhost:8090/3.webm -i http://localhost:8090/4.webm -i http://localhost:8090/5.webm -i http://localhost:8090/6.webm -i http://localhost:8090/7.webm -i http://localhost:8090/8.webm -i http://localhost:8090/9.webm -i http://localhost:8090/10.webm -i http://localhost:8090/11.webm -i http://localhost:8090/12.webm -i http://localhost:8090/13.webm -i http://localhost:8090/14.webm -i http://localhost:8090/15.webm -filter_complex "
nullsrc=size=1280x960 [bg];
[0:v] setpts=PTS-STARTPTS [v0];
[1:v] setpts=PTS-STARTPTS [v1];
[2:v] setpts=PTS-STARTPTS [v2];
[3:v] setpts=PTS-STARTPTS [v3];
[4:v] setpts=PTS-STARTPTS [v4];
[5:v] setpts=PTS-STARTPTS [v5];
[6:v] setpts=PTS-STARTPTS [v6];
[7:v] setpts=PTS-STARTPTS [v7];
[8:v] setpts=PTS-STARTPTS [v8];
[9:v] setpts=PTS-STARTPTS [v9];
[10:v] setpts=PTS-STARTPTS [v10];
[11:v] setpts=PTS-STARTPTS [v11];
[12:v] setpts=PTS-STARTPTS [v12];
[13:v] setpts=PTS-STARTPTS [v13];
[14:v] setpts=PTS-STARTPTS [v14];
[15:v] setpts=PTS-STARTPTS [v15];
[bg][v0] overlay=shortest=1 [bg];
[bg][v1] overlay=shortest=1:x=320 [bg];
[bg][v2] overlay=shortest=1:x=640 [bg];
[bg][v3] overlay=shortest=1:x=960 [bg];
[bg][v4] overlay=shortest=1:y=240 [bg];
[bg][v5] overlay=shortest=1:x=320:y=240 [bg];
[bg][v6] overlay=shortest=1:x=640:y=240 [bg];
[bg][v7] overlay=shortest=1:x=960:y=240 [bg];
[bg][v8] overlay=shortest=1:y=480 [bg];[bg]
[v9] overlay=shortest=1:x=320:y=480 [bg];
[bg][v10] overlay=shortest=1:x=640:y=480 [bg];
[bg][v11] overlay=shortest=1:x=960:y=480 [bg];
[bg][v12] overlay=shortest=1:y=720 [bg];
[bg][v13] overlay=shortest=1:x=320:y=720 [bg];
[bg][v14] overlay=shortest=1:x=640:y=720 [bg];
[bg][v15] overlay=shortest=1:x=960:y=720" http://localhost:8090/all_webm.ffm

ปัญหาเกิดขึ้นเมื่อเชื่อมโยงไปยัง ffserver - ไม่ใช่กระบวนการ ffmpeg หรือกระบวนการ ffserver ขัดข้อง แต่กระแสไม่สามารถเข้าถึงได้ (ในขณะที่การทำงานของ single. channel ทำงานได้ดี) ฉันได้ลองการกำหนดค่าเดียวกันกับ. webm ที่เล็กกว่าด้วยความละเอียดที่เปลี่ยนไปพร้อมกับสิ่งนี้:

<Feed all_webm.ffm>
File /tmp/all_webm.ffm
FileMaxSize 20M
ACL allow localhost
</Feed>

<Stream all.webm>
Feed all_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 1280x960
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin [1|10]
AVOptionVideo qmax [31|42]
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate [512|700|800|1024|3M|3686400]
</Stream>

ด้วยการรวมกันของพารามิเตอร์ที่แสดงด้วยวงเล็บอยู่รอบ ๆ และบางอย่างที่ฉันจำไม่ได้ ใครบ้างมีการกำหนดค่าการทำงานเพื่อสตรีมไฟล์ webm ขนาดใหญ่ด้วย ffserver?

แก้ไข: เพิ่มฟีดที่ฉันใช้ (ไม่มีการเปลี่ยนแปลงจริงสตรีม all.webm ยังคงใช้งานไม่ได้ในบางรูปแบบ) นอกจากนี้ฉันควรจะรวมนี้ในตอนแรก แต่เอาท์พุท ffplay เป็นดังนี้ (มันก็แฮงไปเรื่อย ๆ ):

ffplay http://10.1.1.15:8090/all.webm
ffplay version git-2013-03-17-ef3c888 Copyright (c) 2003-2013 the FFmpeg developers
  built on Mar 17 2013 19:21:22 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
  libavutil      52. 19.101 / 52. 19.101
  libavcodec     55.  1.100 / 55.  1.100
  libavformat    55.  0.100 / 55.  0.100
  libavdevice    55.  0.100 / 55.  0.100
  libavfilter     3. 47.102 /  3. 47.102
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
    nan A-V:  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0

การแก้ไขอื่น:

ทดสอบกับสิ่งต่อไปนี้:

ffmpeg -r 29.97 -f lavfi -i testsrc -s 1280x960 -r 29.97 http://localhost:8090/all_webm.ffm

ซึ่งทำงานเพื่อส่งกระแสข้อมูลการทดสอบ (แม้ว่าจะช้าก็ต้องหยุดทุกสองสามวินาทีในการติดตามในโครเมี่ยมล้มเหลวหลังจากช่วงเวลาเดียวกันใน Firefox) - ได้รับ 13 FPS ดังนั้นฉันจึงพยายามแบ่งส่วนการทดสอบและการแปลง webm ดังนี้:

ffmpeg -f lavfi -i testsrc -s 1280x960 -r 29.97 http://localhost:8090/all.ffm
ffmpeg -r 29.97 -f mpegvideo -i http://localhost:8090/all.mpg -r 29.97 -vcodec libvpx http://localhost:8090/all_webm.ffm

คำสั่งแรกรับ 29.97+ FPS ส่วนที่สองมาที่ 13 FPS

ฉันไม่ได้กังวลเกี่ยวกับ FPS (13 FPS จะใช้ได้กับตาราง 4x4) แต่สิ่งนี้ทำให้ฉันเชื่อว่าปัญหาอาจเกิดขึ้นระหว่างคำสั่ง ffmpeg ที่ยาว (พร้อมตัวเลือก -format_complex) และการนำเข้าสู่ ffserver ทั้งๆที่ ความจริงมันบันทึกไฟล์. webm ที่ถูกต้องสมบูรณ์เมื่อส่งไปยังไฟล์โลคัลแทน ffserver - ยังต้องการความช่วยเหลือ

การแก้ไขอื่น:

การเพิ่มส่วนท้ายของเอาต์พุต ffmpeg ขนาดใหญ่ที่ถูกส่งไปที่ http: // localhost: 8090 / all_webm.ffm ด้านล่างฉันได้เห็นผลลัพธ์ที่คล้ายกันใน mpeg ขนาดเล็ก -> webm แปลงกระบวนการ ffmpeg ที่ทำงาน แต่อัตราที่แตกต่าง ดังนั้นฉันไม่คิดว่ามันมีความสำคัญ (โดยให้มันบันทึกลงในไฟล์. webm ท้องถิ่นและนับระยะเวลาที่ถูกบันทึกขณะที่เดินออกหน้ากล้องหนึ่งและย้อนกลับไปที่เวลาที่ฉันหยุดกระบวนการเวลาที่ซิงค์และ การเล่นแสดงให้เห็นถึงการเคลื่อนไหวที่ราบรื่น 25 FPS) แต่ฉันไม่รู้มากพอเกี่ยวกับกระบวนการที่จะออกกฎอย่างสมบูรณ์ (สิ่งที่ตามมาคือจุดสิ้นสุดของเอาต์พุตคอนโซลหลังจากกด "q" เพื่อหยุด ffmpeg):

[Parsed_overlay_26 @ 0x37464e0] Buffer queue overflow, dropping.
    Last message repeated 19 times
Buffer queue overflow, dropping. size=       4kB time=00:36:21.64 bitrate=   0.0kbits/s
[Parsed_overlay_25 @ 0x374db20] Buffer queue overflow, dropping.
    Last message repeated 28 times
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
    Last message repeated 11 times
[Parsed_overlay_20 @ 0x374e3c0] Buffer queue overflow, dropping.
    Last message repeated 30 times
[Parsed_overlay_19 @ 0x374e4a0] Buffer queue overflow, dropping.
    Last message repeated 28 times
[Parsed_overlay_32 @ 0x3749b20] Buffer queue overflow, dropping.
    Last message repeated 17 times
[Parsed_overlay_24 @ 0x3745fc0] Buffer queue overflow, dropping.
    Last message repeated 2 times
[Parsed_overlay_23 @ 0x3751060] Buffer queue overflow, dropping.
Buffer queue overflow, dropping. size=       4kB time=00:36:22.28 bitrate=   0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
    Last message repeated 6 times
Buffer queue overflow, dropping. size=       4kB time=00:36:23.04 bitrate=   0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
    Last message repeated 22 times
Buffer queue overflow, dropping. size=       4kB time=00:36:23.68 bitrate=   0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
    Last message repeated 10 times
Buffer queue overflow, dropping. size=       4kB time=00:36:24.12 bitrate=   0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
    Last message repeated 9 times
Buffer queue overflow, dropping. size=       4kB time=00:36:24.84 bitrate=   0.0kbits/s
[Parsed_overlay_17 @ 0x374ba40] Buffer queue overflow, dropping.
    Last message repeated 1 times
Buffer queue overflow, dropping. size=       4kB time=00:36:25.32 bitrate=   0.0kbits/s
frame=54637 fps= 25 q=24.8 Lq=0.0 size=      48kB time=00:36:25.44 bitrate=   0.2kbits/s
video:172039kB audio:0kB subtitle:0 global headers:0kB muxing overhead -99.972099%

คำตอบ:


0

คุณให้<feed all_webm.ffm> ... </feed>ก่อนของคุณ<Stream all.webm>? ฉันคิดว่าควรทำเคล็ดลับเนื่องจาก FFserver อาจไม่รู้ว่าจะรับฟีดจากที่ใด

หากไม่ได้ผลคุณสามารถทดสอบฟีดของคุณจาก FFmpeg โดยใช้ ffplay http://localhost:8090/all_webm.ffm


ฉันเว้นไว้เพื่อประหยัดพื้นที่เพราะฟีดเหมือนกันฉันจะแก้ไขโพสต์ของฉันเพื่อแสดงฟีดที่ฉันใช้
CoryG

เพิ่มเอาต์พุต ffplay ด้วย (แฮงค์)
CoryG

ทำไมคุณไม่ลองffplay http://10.1.1.15:8090/all.webm? ฉันคิดว่ามันเป็นใน localhost ของคุณ: ffplay http://localhost:8090/all_webm.ffm?
Nick van Tilborg

IP ภายนอกของ localhost คือ 10.1.1.15 - เป็นเซิร์ฟเวอร์ Ubuntu ดังนั้นฉันต้องเรียกใช้ ffplay จากเครื่องภายนอก (เดสก์ท็อป Ubuntu) การประมวลผลวิดีโอทั้งหมดเกิดขึ้นใน 10.1.1.15 (ยกเว้นสำหรับการอ่านครั้งแรกซึ่งอยู่ที่ 10.1.2.2 (10.1.1.15 มีอินเทอร์เฟซเครือข่ายแยกต่างหากที่ตั้งค่าเป็น 10.1.2.1 โดยเฉพาะเนื่องจากการ์ดจับภาพวิดีโอ 16 ch ทั้งสองตัวออก ของวิศวกรรมบางจัดการกับชีวิต pci-x ลุกขึ้นจากซ็อกเก็ตของพวกเขาเมื่อใดก็ตามที่แทรกทั้งๆที่พวกเขาทำงานกับการ์ด PCI อื่น ๆ ที่ฉันมีในร้านและงาน pci วิดีโอของในเครื่องอื่น ๆ )
CoryG

10.1.2.1 และ 10.1.2.2 เชื่อมต่อผ่านสายเคเบิลครอสโอเวอร์, 10.1.2.2 เป็นพลังงานที่ค่อนข้างต่ำ, มันแค่สตรีมจากการ์ด pci ไปที่ 10.1.2.1/10.1.1.15 (ฉันพยายามให้มันแปลงเป็น. webm ด้วยเช่นกัน ช้าเกินไปสำหรับสิ่งนั้นดังนั้นฉันจึงต้องวางทุกอย่างที่ผ่านมาบรรทัด ffmpeg แรกไว้ในโพสต์ของฉันบนเซิร์ฟเวอร์วิดีโอหลัก [10.1.1.15/10.1.2.1])
CoryG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.