Score:0

ffmpeg alsa ไม่สามารถบันทึกเสียงจากการ์ดจับภาพ UVC USB HDMI ไปยังเซิร์ฟเวอร์ HLS

ธง it

ในบริบทเดียวกันก่อนหน้านี้ ฉันได้รับความช่วยเหลือจากพี่ชาย ( llogan ) เมื่อวันที่ 15 ต.ค. เวลา 16:35 น. โดยใช้ไวยากรณ์ตามคำแนะนำของเขา และฉันได้ลองใช้แล้ว ในตอนแรกฉันได้เสียงที่ตะกุกตะกัก แล้วมันก็กลับมาเงียบ ,แต่ด้วยเหตุผลบางประการ ฉันไม่ได้เข้าบล็อกนี้เป็นเวลานาน การสื่อสารจึงขาดการติดต่อ ใครก็ได้ช่วยฉันที ? สภาพปัจจุบันเราใช้ไวยากรณ์:

ffmpeg -f alsa -channels 2 -sample_rate 44100 -i hw:0 -f video4linux2 -i /dev/video0 -c:a aac -b:a 128k -c:v libx264 -preset veryfast -b:v 4000k -maxrate 4000k -bufsize 12000k -g 10 -vf "scale=1280:720,format=yuv420p" -f flv rtmp://localhost/show/stream

และฉันมีข้อมูลที่ทำงานจาก ffmpeg :

[alsa @ 0x556854b35c60] ALSA บัฟเฟอร์ xrun 
เฟรม= 237 fps=5.0 q=13.0 ขนาด= 21447kB เวลา=00:00:43.23 บิตเรต=4063.4kbits/s ความเร็ว=0.9 
เฟรม= 239 fps=5.0 q=13.0 ขนาด= 21633kB เวลา=00:00:43.23 บิตเรต=4098.6kbits/s ความเร็ว=0.9 
[alsa @ 0x556854b35c60] ALSA บัฟเฟอร์ xrun 
เฟรม= 242 fps=5.0 q=13.0 ขนาด= 21932kB เวลา=00:00:44.23 บิตเรต=4061.5kbits/s ความเร็ว=0.9 
เฟรม= 244 fps=5.0 q=13.0 ขนาด= 22124kB เวลา=00:00:44.23 บิตเรต=4097.1kbits/s ความเร็ว=0.9

มีอะไรผิดปกติหรือไม่ และเราหยุดตัวเข้ารหัสที่มีข้อมูลคือ:

[flv @ 0x5585283c6a40] ไม่สามารถอัปเดตส่วนหัวด้วยระยะเวลาที่ถูกต้อง
[flv @ 0x5585283c6a40] ไม่สามารถอัปเดตส่วนหัวด้วยขนาดไฟล์ที่ถูกต้อง
เฟรม=428826 fps=5.0 q=-1.0 Lsize=40706449kB เวลา=23:49:20.70 บิตเรต=3888.1kbits/s ความเร็ว=0.958x
วิดีโอ:428826kB เสียง:767kB คำบรรยาย:0kB สตรีมอื่นๆ:0kB ส่วนหัวส่วนกลาง:0kB โอเวอร์เฮด muxing: 0.025860%
[libx264 @ 0x5585283c8200] เฟรม I:57274 QP เฉลี่ย: 7.20 ขนาด:151544
[libx264 @ 0x5585283c8200] เฟรม P:263139 QP เฉลี่ย: 10.57 ขนาด:96778
[libx264 @ 0x5585283c8200] เฟรม B:108413 Avg QP:10.50 ขนาด: 69423
[libx264 @ 0x5585283c8200] B-frames ที่ต่อเนื่องกัน: 63.0% 7.8% 6.5% 22.7%
[libx264 @ 0x5585283c8200] mb ฉัน I16..4: 14.2% 12.6% 73.2%
[libx264 @ 0x5585283c8200] mb P I16..4: 12.6% 11.5% 27.5% P16..4: 8.2% 17.2% 20.3% 0.0% 0.0% ข้าม: 2.7%
[libx264 @ 0x5585283c8200] mb B I16..4: 4.2% 2.4% 4.7% B16..8: 23.7% 26.8% 14.9% ทางตรง:14.1% ข้าม:9.1% L0:36.9% L1:34.7% BI:28.4%
[libx264 @ 0x5585283c8200] การแปลง 8x8 ภายใน:19.5% ระหว่าง:35.3%
[libx264 @ 0x5585283c8200] รหัส y,uvDC,uvAC ภายใน: 83.4% 88.7% 85.2% ระหว่าง: 78.4% 76.8% 46.4%
[libx264 @ 0x5585283c8200] i16 v,h,dc,p: 45% 40% 10% 5%
[libx264 @ 0x5585283c8200] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 41% 12% 3% 3% 3% 5% 3% 5%
[libx264 @ 0x5585283c8200] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 34% 8% 4% 6% 5% 6% 5% 6%
[libx264 @ 0x5585283c8200] i8c dc,h,v,p: 34% 35% 18% 13%
[libx264 @ 0x5585283c8200] เฟรม P ถ่วงน้ำหนัก: Y:2.6% UV:1.9%
[libx264 @ 0x5585283c8200] kb/s:3887.06
[aac@0x5585283cc760] Qavg: 65536.000
s710@sensorsip:~$

ก่อนอื่นเราเริ่ม ffmpg msg คือ:

s710@sensorsip:~$ ffmpeg -f alsa -channels 2 -sample_rate 44100 -i hw:0 -f video4linux2 -i /dev/video0 -c:a aac -b:a 128k -c:v libx264 -preset veryfast -b :v 4000k -maxrate 4000k -bufsize 12000k -g 10 -vf "scale=1280:720,format=yuv420p" -f flv rtmp://localhost/show/stream
ffmpeg รุ่น 3.4.8-0ubuntu0.2 ลิขสิทธิ์ (c) 2000-2020 นักพัฒนา FFmpeg
  สร้างด้วย gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  การกำหนดค่า: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --ปิดการใช้งานการลอก --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libie c61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil 55. 78.100 / 55. 78.100
  libavcodec 57.107.100 / 57.107.100
  รูปแบบ libav 57. 83.100 / 57. 83.100
  libavdevice 57. 10.100 / 57. 10.100
  libavfilter 6.107.100 / 6.107.100
  libavresample 3. 7. 0 / 3. 7. 0
  libswscale 4. 8.100 / 4. 8.100
  libswresample 2. 9.100 / 2. 9.100
  libpostproc 54. 7.100 / 54. 7.100
เค้าโครงช่องเดาสำหรับสตรีมอินพุต #0.0 : สเตอริโอ
อินพุต #0, alsa, จาก 'hw:0':
  ระยะเวลา: N/A เริ่มต้น: 1635926018.864251 อัตราบิต: 1411 kb/s
    สตรีม #0:0: เสียง: pcm_s16le, 44100 Hz, สเตอริโอ, s16, 1411 kb/s
อินพุต #1, video4linux2,v4l2 จาก '/dev/video0':
  ระยะเวลา: N/A เริ่มต้น: 89255.399764 บิตเรต: 165888 kb/s
    สตรีม #1:0: วิดีโอ: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 165888 kb/s, 5 fps, 5 tbr, 1,000k tbn, 1,000k tbc
การทำแผนที่สตรีม:
  สตรีม #1:0 -> #0:0 (วิดีโอดิบ (เนทีฟ) -> h264 (libx264))
  สตรีม #0:0 -> #0:1 (pcm_s16le (เนทีฟ) -> aac (เนทีฟ))
กด [q] เพื่อหยุด [?] เพื่อขอความช่วยเหลือ
[alsa @ 0x5585283b2c60] ALSA บัฟเฟอร์ xrun
[libx264@0x5585283c8200] โดยใช้ความสามารถของ cpu: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x5585283c8200] โปรไฟล์สูง ระดับ 3.1
[libx264 @ 0x5585283c8200] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock =1:0:0 วิเคราะห์=0x3:0x113 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip= 1 chroma_qp_offset=0 เธรด=6 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp =1 keyint=10 keyint_min=1 ฉากคัท=40 intra_refresh=0 rc_lookahead=10 rc=cbr mbtree=1 บิตเรต=4000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=4000 vbv_bufsize=12000 nal_hrd=ไม่มี ฟิลเลอร์=0 ip_ratio=1.40 aq=1:1.00
เอาต์พุต #0, flv, ถึง 'rtmp://localhost/show/stream':
  ข้อมูลเมตา:
    ตัวเข้ารหัส: Lavf57.83.100
    สตรีม #0:0: วิดีโอ: h264 (libx264) ([7][0][0][0][0] / 0x0007), yuv420p(โปรเกรสซีฟ), 1280x720, q=-1--1, 4000 kb/s, 5 fps, 1k tbn, 5 tbc
    ข้อมูลเมตา:
      ตัวเข้ารหัส : Lavc57.107.100 libx264
    ข้อมูลด้าน:
      cpb: บิตเรตสูงสุด/นาที/เฉลี่ย: 4000000/0/4000000 ขนาดบัฟเฟอร์: 12000000 vbv_delay: -1
    สตรีม #0:1: เสียง: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, สเตอริโอ, fltp, 128 kb/s
    ข้อมูลเมตา:
      ตัวเข้ารหัส : Lavc57.107.100 aac
[alsa @ 0x5585283b2c60] การบล็อกคิวข้อความเธรด; พิจารณาการเพิ่มตัวเลือก thread_queue_size (ค่าปัจจุบัน: 8)

ความถูกต้องอยู่ที่ไหน ฮาร์ดแวร์ CPU ต่ำเกินไปหรือไม่ , สเป็ค CPU ของฉันคือ Intel i5 Gen 2, Ram 8Gb , SSD 500GB ( Futjisu lifebook S Series S710 ), OS ubuntu 18.4 ( ฉันเพิ่งเริ่มเรียนรู้บน Linux )

ฉันเห็นจาก VLC ตัวแปลงสัญญาณเสียงที่จับได้คือ ADTS และสแตติกก็อยู่ที่นั่นด้วย แต่ไม่มีเสียง ถ้าฉันจำไม่ผิด เมื่อฉันปิดเซิร์ฟเวอร์ HLS ในวินาทีสุดท้ายก็มีเสียงและสตรีมก็ตาย

ฉันพยายามรวบรวมข้อมูลใน VLC ดังนี้: เสียงตัวแปลงสัญญาณที่จับบน VLC การเก็บสถิติบน VLC

หากปัญหาของฉันอยู่ที่ด้านฮาร์ดแวร์ เป็นไปได้หรือไม่ที่จะเพิ่มการ์ด NVEDIA GPU โดยใช้ตัวเร่งความเร็วฮาร์ดแวร์ CUDA จะแก้ไขได้หรือไม่

เราเรียกใช้ aplay -l และ v4l2-ctl --list-device msg คือ:

**** รายชื่ออุปกรณ์ฮาร์ดแวร์ PLAYBACK ****
การ์ด 0: MID [HDA Intel MID], อุปกรณ์ 0: ALC269 อะนาล็อก [ALC269 อะนาล็อก]
  อุปกรณ์ย่อย: 1/1
  อุปกรณ์ย่อย #0: อุปกรณ์ย่อย #0
การ์ด 0: MID [HDA Intel MID], อุปกรณ์ 3: HDMI 0 [HDMI 0]
  อุปกรณ์ย่อย: 1/1
  อุปกรณ์ย่อย #0: อุปกรณ์ย่อย #0
การ์ด 0: MID [HDA Intel MID], อุปกรณ์ 7: HDMI 1 [HDMI 1]
  อุปกรณ์ย่อย: 1/1
  อุปกรณ์ย่อย #0: อุปกรณ์ย่อย #0

s710@sensorsip:~$ v4l2-ctl --list-device
วิดีโอ USB: วิดีโอ USB (usb-0000:00:1a.0-1.2):
        /dev/video0

วิดีโอ USB: วิดีโอ USB (usb-0000:00:1a.0-1.3):
        /dev/video1

เว็บแคม USB: เว็บแคม USB (usb-0000:00:1d.0-1.3):
        /dev/video2

ที่เราใช้ตอนนี้คือ USB Video 0 โดยใช้คำสั่งเป็น HW:0

ขอบคุณสำหรับความช่วยเหลือของคุณ..

ความนับถือ,

คริสเตียน ฮุง

llogan avatar
jp flag
1) ffmpeg ของคุณเก่า [ดาวน์โหลด](https://johnvansickle.com/ffmpeg/) เวอร์ชัน "git master" (ไม่ใช่เวอร์ชันรีลีส) หรือ [คอมไพล์](https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu) ffmpeg ใหม่ .2) คุณได้รับข้อความเตือน `บล็อกคิวข้อความเธรด; พิจารณาการเพิ่มตัวเลือก thread_queue_size (ค่าปัจจุบัน: 8)` ลองเพิ่มสิ่งนี้ (หลังจากอัปเกรด) เช่น `ffmpeg -f alsa -channels 2 -sample_rate 44100 -thread_queue_size 128 -i hw:0 ...` 128 เป็นจำนวนตามอำเภอใจตามตัวอย่าง คุณต้องทดลองเพื่อหาว่าเลขอะไรเหมาะกับคุณ เพิ่มขึ้นจนกว่าข้อความเตือนจะหายไป
llogan avatar
jp flag
นอกจากนี้ ทดสอบการบันทึกเสียงด้วย `arecord` มันใช้งานไม่ได้หรือเสียงไม่ดี? ถ้าใช่ แสดงว่าปัญหาน่าจะไม่ใช่ ffmpeg
Hung Christian avatar
it flag
ขอบคุณพี่ชายของคุณ พรุ่งนี้จะดาวน์โหลดและลอง
Hung Christian avatar
it flag
1. ขอบคุณ เราสามารถอัปเกรด ffmpeg เป็นเวอร์ชัน 4,4 ได้ อัปเกรดอย่างไร สอนฉันได้ไหม 2. เราใช้ codec mpeg4 encoder ไฟล์ mp4 เสียงดีเหมือนกัน แต่ใช้ codec libx264 กับ libx265 ไม่ได้ เสียงเข้าได้แต่อืด ช่วยฉันหน่อยได้ไหม ขอบคุณ
llogan avatar
jp flag
หากต้องการอัปเกรด [ดาวน์โหลด](https://johnvansickle.com/ffmpeg/) ffmpeg และใส่ `/usr/local/bin` หรือทำตามคำแนะนำ [compile](https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu) สำหรับ libx264 คุณต้องทดสอบ ffmpeg ใหม่ก่อนทำอย่างอื่น จากนั้นลองเพิ่มตัวเลือก thread_queue_size คุณทดสอบ arecord แล้วหรือยัง?
Hung Christian avatar
it flag
@llogan วันสุดท้ายฉันอัปเกรดอูบุนตูของฉันจาก 18.04 เป็นอูบุนตู 20.04.3 แล้ว และติดตั้งกลับ ffmpeg ตอนนี้เวอร์ชัน 4.2.4 แต่ฉันใช้ v4l2-ctl ที่แสดงการ์ดจับภาพ UBS ของฉันตอนนี้คือ USB Video: USB Video (usb-0000 :00:1ก.0-1.3): /dev/video0 /dev/video1 ฉันจะแยกแยะได้อย่างไรว่าอันไหนเป็นเสียงและวิดีโอ และฉันควรใช้คำสั่งอะไรสำหรับ ALSA ขอบคุณสำหรับความช่วยเหลือ
Hung Christian avatar
it flag
@llogan ฉันลองเรียกใช้คำแนะนำของคุณ "ffmpeg -f alsa -channels 2 -sample_rate 44100 -i hw:0 -f video4linux2 -i /dev/video0 -c:a aac -b:a 128k -c:v libx264 - ตั้งค่าล่วงหน้าเร็วมาก -b:v 4000k -maxrate 4000k -bufsize 12000k -g 10 -vf "scale=1280:720,format=yuv420p" -fflv rtmp://localhost/show/stream " และตอนนี้เราไม่สามารถเรียกใช้ได้ alsa hw:0 หรือ hw:1 ข้อความแสดงข้อผิดพลาดคือ hw:0: protocol not found คุณหมายถึง file:hw:0 ใช่หรือไม่ และฉันใช้ hw:1 หรือไม่ msg เป็น hw:1: protocol not found คุณหมายถึง file:hw:1 หรือไม่ ฉันควรทำอย่างไร , ขอบคุณสำหรับความช่วยเหลือของคุณ
Hung Christian avatar
it flag
ตอนนี้ฉันพยายามรันด้วยคำสั่ง " s710@sensorsip:~$ ffmpeg -f alsa -channels 2 -sample_rate 44100 -i /dev/video0 -f video4linux2 -i /dev/video1 -c:a aac -b:a 128k -c:v libx264 -preset เร็วมาก -b:v 4000k -maxrate 4000k -bufsize 12000k -g 10 -vf "scale=1280:720,format=yuv420p" -f flv rtmp://localhost/show/stream " , i ได้รับข้อผิดพลาด msg : " [alsa @ 0x56355f45dac0] ไม่สามารถเปิดอุปกรณ์เสียง /dev/video0 (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว) /dev/video0: Input/output error " และฉันพยายามแทนที่คำสั่ง " /dev/video0 เป็น dev /video1 " ผลลัพธ์คือข้อผิดพลาดเหมือนกัน โปรดช่วยฉันด้วย ขอบคุณ
Hung Christian avatar
it flag
@llogan ขออภัยลืมตอบคำถามของคุณ ฉันไม่ได้ลอง เพราะก่อนหน้านี้ฉันใช้ตัวแปลงสัญญาณ mpeg4 ฉันสามารถรับเสียงได้ ฉันใช้ตัวแปลงสัญญาณ libx264 หรือ libx265 เท่านั้นที่ไม่สามารถรับเสียงได้ และฉัน ลองสตรีมเสียงเท่านั้น มันใช้งานได้ (บน Ubuntu เวอร์ชัน 18.4 ตอนนี้ฉันไม่รู้คำสั่งให้รับอุปกรณ์ใน alsa ขอโทษที่รบกวน ขอบคุณสำหรับความช่วยเหลืออีกครั้ง
Hung Christian avatar
it flag
อุปกรณ์การ์ดเสียงของฉันตอนนี้คือ: s710@sensorsip:~$ arecord -l **** รายชื่ออุปกรณ์ฮาร์ดแวร์ CAPTURE **** การ์ด 0: MS2109_1 [MS2109], อุปกรณ์ 0: USB Audio [เสียง USB] อุปกรณ์ย่อย: 1/1 อุปกรณ์ย่อย #0: อุปกรณ์ย่อย #0 การ์ด 1: MS2109 [MS2109], อุปกรณ์ 0: USB Audio [เสียง USB] อุปกรณ์ย่อย: 1/1 อุปกรณ์ย่อย #0: อุปกรณ์ย่อย #0 การ์ด 2: MID [HDA Intel MID], อุปกรณ์ 0: ALC269 อะนาล็อก [ALC269 อะนาล็อก] อุปกรณ์ย่อย: 1/1 อุปกรณ์ย่อย #0: อุปกรณ์ย่อย #0
llogan avatar
jp flag
สาขาเผยแพร่ FFmpeg 4.2 นั้นเก่า ดาวน์โหลดหรือคอมไพล์เวอร์ชั่นใหม่ก่อนทำอย่างอื่น
Hung Christian avatar
it flag
ติดตั้ง 4.4.1 แล้วเสียงบิตเรตตัวเข้ารหัส alsa คือ 48000 แต่ฉันตั้งค่าเป็น 44100 โดยใช้ hw:0 และถ้าฉันใช้ hw:2 เสียงบิตเรตตัวเข้ารหัสคือ 44100 แต่ยังไม่มีเพลง ขอบคุณ
Hung Christian avatar
it flag
@llogan ดูเหมือนว่าฉันมีปัญหาที่ฉันเผชิญ การ์ดจับภาพของฉัน hw:0 ใน alsamixer ไม่พบการกำหนดค่าเสียง แสดงเฉพาะ "อุปกรณ์เสียงนี้ไม่มีการควบคุมการเล่นใด ๆ " แต่ตรวจพบการ์ด: MS2109 Chip: USB Mixer, View: F3 [Playback] , และทันทีที่ฉันกด F3, ผลลัพธ์คือออกจาก alsamixer , ฉันไม่รู้ว่าต้องทำอะไรอีก แต่ฉันจะพยายามเรียกใช้จาก windows solution, ใครรู้ช่วยที , ขอบใจ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา