Strona 1 z 1

[+] Karta TV brak dźwięku przy nagrywaniu programów telewizyjnych

: 01 lipca 2013, 00:53
autor: deimos
Witam.
Po paru miesiącach udało mi się uruchomić moją kartę tv Leadtek WinFast DTV2000 H PLUS [card=87]
pod Kubuntu 13.04/12.04 i pod Debianem7 oba systemy w wersji x86_64. Tak na marginesie dodam że moja przygoda z linuksem zaczeła się w lutym więc nowy jestem.

Jest obraz i dźwięk, co prawda dźwięk jest opóźniony w stosunku do obrazu, bo program do oglądanie uruchamiam poniższym poleceniem:

Kod: Zaznacz cały

tvtime | arecord -D hw:1,0 -r 44000 -c 2 -f S16_LE | aplay -

Niestety, inaczej się nie da bo wyjście liniowe z karty się popsuło. A chciałbym nagrywać programy telewizyjne pod Debianem. I wiem, że się da bo parę dni temu przypadkiem udało mi się to zrobić, że nagrałem jakiś program takim poleceniem:

Kod: Zaznacz cały

mencoder tv:// -tv device=/dev/video0:input=1:driver=v4l2 :o utfmt=yuy2:normid=5:fps=25:width=768:height=578:brightness=20:contrast=0:saturation=20:freq=199.000:fps=25:audiorate=48000:amode=1:alsa:adevice=hw.0 -vf pp=de -of mpeg -mpegopts format=dvd -srate 48000 -ofps 25 -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:keyint=15:vrc_maxrate=9800:vbitrate=2000:aspect=4/3:acodec=mp2:abitrate=192 -vf scale=720:576 -o /home/janusz/tvp1_`date "+%s"`.mpg
Dźwięk był zsynchronizowany z obrazem. Tylko, że coś popsułem w systemie i musiałem przywrócić go z kopii zapasowej. Niestety, nie zapisałem jak to zrobiłem, a może sam nie wiedziałem - nie pamiętam.

Próbowałem odtworzyć stan systemu sprzed awarii w nadziei że uda mi się znowu to zrobić niestety jak na razie mi się nie udało.

Pamiętam, że przed awarią nie działał mi dźwięk w winecfg v1.5.19.
Próbowałem znaleźć w internecie rozwiązanie tego problemu i gdy wszystkie sposoby zawiodły sprawdziłem nagrywanie z tv i o dziwo udało się coś nagrać.

Bawiłem się też z alsamixerem włączając i wyłączając różne kanały.
Doinstalowałem mnóstwo pakietów do alsy, pulseaudio i gstreamer, jakieś wtyczki do nich itp. i lipa dalej nie działa. Może coś gdzieś w jakimś pliku zmieniłem ale cóż amnezja.

W ustawieniach systemu -> multimedia zakładka Ustawienia urządzenia dźwiękowe, gdy zmienię kartę dźwiękową z wbudowanej na:

Kod: Zaznacz cały

CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]
to pasek poziomy wyjściowe skacze, czyli dźwięk tam dociera, tylko nie słychać go w głośnikach bez użycia arecord.

Tu wyniki paru poleceń, które mogą pomóc:

Kod: Zaznacz cały

arecord -l

**** List of CAPTURE Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: ALC889A Analog [ALC889A Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 1: ALC889A Digital [ALC889A Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 2: ALC889A Analog [ALC889A Analog]
  Subdevices: 2/2
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
card 1: CX8801 [Conexant CX8801], device 0: CX88 Digital [CX88 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Kod: Zaznacz cały

lsmod | grep cx88

cx88_dvb               30564  0 
cx88_vp3054_i2c        12564  1 cx88_dvb
videobuf_dvb           12762  1 cx88_dvb
dvb_core               77734  2 videobuf_dvb,cx88_dvb
cx88_alsa              17365  1 
snd_pcm                68083  5 snd_pcm_oss,cx88_alsa,snd_hda_codec,snd_hda_intel
cx8800                 35584  0 
cx8802                 17390  1 cx88_dvb
cx88xx                 72141  4 cx8802,cx8800,cx88_alsa,cx88_dvb
btcx_risc              12555  4 cx88xx,cx8802,cx8800,cx88_alsa
tveeprom               20593  1 cx88xx
videobuf_dma_sg        13231  5 cx88xx,cx8802,cx8800,cx88_alsa,cx88_dvb
videobuf_core          17825  5 videobuf_dma_sg,cx88xx,cx8802,cx8800,videobuf_dvb
v4l2_common            13222  3 cx88xx,cx8800,tuner
videodev               70889  4 v4l2_common,cx88xx,cx8800,tuner
rc_core                18286  10 ir_nec_decoder,ir_rc5_decoder,cx88xx,ir_rc6_decoder,ir_jvc_decoder,ir_sony_decoder,ir_mce_kbd_decoder,ir_lirc_codec,rc_winfast
i2c_algo_bit           12841  2 cx88xx,cx88_vp3054_i2c
snd                    52889  21 snd_timer,snd_seq_device,snd_seq,snd_rawmidi,snd_pcm,snd_mixer_oss,snd_pcm_oss,snd_hwdep,cx88_alsa,snd_hda_codec,snd_hda_intel,snd_hda_codec_realtek
i2c_core               23876  13 i2c_piix4,i2c_algo_bit,videodev,v4l2_common,tveeprom,cx88xx,nvidia,cx8800,tuner,xc4000,cx88_vp3054_i2c,cx88_dvb,zl10353
Kawałek wyniku polecenia:

Kod: Zaznacz cały

dmesg
o mojej karcie tv:

Kod: Zaznacz cały

[    7.433357] hda_codec: ALC889A: BIOS auto-probing.
[    7.449210] input: HDA ATI SB Headphone as /devices/pci0000:00/0000:00:14.2/sound/card0/input5
[    7.461036] xc4000 0-0061: creating new instance
[    7.462182] xc4000: Successfully identified at address 0x61
[    7.462186] xc4000: Firmware has not been loaded previously
[    7.504620] cx88-mpeg driver manager 0000:03:06.2: firmware: agent loaded dvb-fe-xc4000-1.4.fw into memory
[    7.532020] Registered IR keymap rc-winfast
[    7.532190] input: cx88 IR (Leadtek WinFast DTV200 as /devices/pci0000:00/0000:00:14.4/0000:03:06.2/rc/rc0/input6
[    7.532275] rc0: cx88 IR (Leadtek WinFast DTV200 as /devices/pci0000:00/0000:00:14.4/0000:03:06.2/rc/rc0
[    7.532281] cx88[0]/2: cx2388x 8802 Driver Manager
[    7.532322] cx88[0]/2: found at 0000:03:06.2, rev: 5, irq: 20, latency: 32, mmio: 0xfb000000
[    7.532415] cx88[0]/0: found at 0000:03:06.0, rev: 5, irq: 20, latency: 32, mmio: 0xfa000000
[    7.532517] cx88[0]: Calling XC4000 callback
[    7.565168] cx88/2: cx2388x dvb driver version 0.0.9 loaded
[    7.565174] cx88/2: registering cx8802 driver, type: dvb access: shared
[    7.565184] cx88[0]/2: subsystem: 107d:6f42, board: Leadtek WinFast DTV2000 H PLUS [card=87]
[    9.432026] Selecting best matching firmware (3 bits differ) for type=(0), id 000000200000b700:
[    9.684167] cx88[0]/0: registered device video0 [v4l2]
[    9.684245] cx88[0]/0: registered device vbi0
[    9.684317] cx88[0]/0: registered device radio0
[    9.684379] cx88[0]/2: cx2388x based DVB/ATSC card
[    9.684385] cx8802_alloc_frontends() allocating 1 frontend(s)
[    9.684482] cx88[0]/1: CX88x/0: ALSA support for cx2388x boards
[    9.720124] xc4000 0-0061: attaching existing instance
[    9.720130] xc4000: Successfully identified at address 0x61
[    9.720134] xc4000: Firmware has been loaded previously
[    9.720138] cx88[0]/2: xc4000 attached
[    9.720144] DVB: registering new adapter (cx88[0])
[    9.720150] DVB: registering adapter 0 frontend 0 (Zarlink ZL10353 DVB-T)...
Nie wiem co tam jeszcze podać.

Ma ktoś jakiś pomysł co zrobić żeby dało się nagrywać programy z telewizji?

Edycja 1: No i proszę udało mi się znaleźć rozwiązanie na tej stronie: http://mplayerhq.hu/pipermail/mplayer-u ... 72849.html

Brakujące biblioteki to te zaczynające się w nazwie od libalsa* nie wiem, czy wszystkie były potrzebne, no ale ważne, że działa.

A i polecenie nagrywające się trochę zmieniło:

Kod: Zaznacz cały

mencoder tv:// -tv device=/dev/video0:input=1:driver=v4l2 :o utfmt=yuy2:normid=5:fps=25:width=768:height=578:brightness=20:contrast=0:saturation=20:freq=199.000:fps=25:audiorate=48000:amode=1:alsa:adevice=hw.2,0:forceaudio:volume=100 -vf pp=de -of mpeg -mpegopts format=dvd -srate 48000 -ofps 25 -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:keyint=15:vrc_maxrate=9800:vbitrate=6000:aspect=4/3:acodec=mp2:abitrate=192 -vf scale=720:576 -o /home/janusz/tvp1_`date "+%s"`.mpg
i odtwarzająca:

Kod: Zaznacz cały

mplayer tv:// -tv driver=v4l2:input=1:alsa:adevice=hw.2,0:amode=1:audiorate=48000:forceaudio:volume=100:immediatemode=0:normid=5 :o utfmt=yuy2:fps=25:width=640:height=480:brightness=20:contrast=0:saturation=20:freq=199 -vf pp=lb
A hw.2,0 dałem bo wyświetlając zawartość /proc/asound/pcm

Kod: Zaznacz cały

01-00: ALC889A Analog : ALC889A Analog : playback 1 : capture 1
01-01: ALC889A Digital : ALC889A Digital : playback 1 : capture 1
01-02: ALC889A Analog : ALC889A Analog : capture 2
02-00: CX88 Digital : CX88 Digital : capture 1
skojarzyła mi się ta linijka 02-00 z numerem przy hw. :)

A i dopisałem do pliku /etc/modprobe.d/alsa-base.conf linijkę:

Kod: Zaznacz cały

options snd-hda-intel index=-2
Jutro sprawdzę czy będzie to działać bez tych wszystkich bibliotek, o których napisałem wcześniej.

Tak więc z rozwiązaniem się jeszcze wstrzymam.

Edycja 2:
Sprawdziłem, wystarczy zainstalować paczki z nazwą rozpoczynającą się od:

Kod: Zaznacz cały

libalsa
a następnie sprawdzić pod jakim numerkiem ,,hw'' kryje się kartra tv z polecenia:

Kod: Zaznacz cały

cat /proc/asound/pcm
i działa.

Dodane:
Poprawiłem polecenie nagrywające teraz nie będzie wyświetlać informacji typu:

Kod: Zaznacz cały

drop frame
itp.:

Kod: Zaznacz cały

mencoder tv:// -tv device=/dev/video0:input=1:driver=v4l2 :o utfmt=yuy2:normid=5 :o utfmt=uyvy:fps=25:width=720:height=578:brightness=20:contrast=0:saturation=0:freq=175,500:fps=25:audiorate=48000:amode=1:alsa:adevice=hw.1,0:forceaudio:volume=100 -vf pp=de -of mpeg -mpegopts format=dvd -srate 48000 -ofps 25 -mc 0 -noskip -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:keyint=15:vrc_maxrate=9800:vbitrate=8000:aspect=4/3:acodec=ac3:abitrate=192 -vf pp=fd -o /home/janusz/movie.mpg
Przy okazji wrzucę swój skrypt do nagrywania z tv może się komuś przyda do czegoś:

Kod: Zaznacz cały

#!/bin/bash
odp=$(zenity --list \
  --title="Wybierz program" \
  --width=300 \
  --height=600 \
  --column="Hz" --column="Nazwa" \
    191,000 TVP1  \
    199,000 TVP2  \
    175,500 Polsat \
    343,250 "TVP Historia" \
    351,000 "TVP Kultura " \
    271,500 TVN \
    287,250 "TVN 7" \
    167,500 "TV 4" \
    151,000 "TV Puls" \
    127,250 "TELE 5" \
    415,250 "Zone Europe" \
    383,250 Foxlife \
    303,250 PL \
    327,500 "13 Street" \
    207,500 "TVP Polonia" \
    215,750 Esprit \
    143,250 TLC \
    479,250 "POLO TV ");
#--------------------------------------------------------------------------
amixer --card 0 set "Line" mute
rec=$(mencoder tv:// -tv device=/dev/video0:input=1:driver=v4l2 :o utfmt=yuy2:normid=5 :o utfmt=uyvy:fps=25:width=720:height=578:brightness=20:contrast=0:saturation=0:freq=$odp:fps=25:audiorate=48000:amode=1:alsa:adevice=hw.1,0:forceaudio:volume=100 -vf pp=de -of mpeg -mpegopts format=dvd -srate 48000 -ofps 25 -mc 0 -noskip -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:keyint=15:vrc_maxrate=9800:vbitrate=8000:aspect=4/3:acodec=ac3:abitrate=192 -vf pp=fd -o /home/janusz/movie_`date "+%s"`.mpg)
#--------------------------------------------------------------------------
konsole -e $rec
Powyższy skrypt odpalam z tego:

Kod: Zaznacz cały

#!/bin/bash
konsole -e /home/janusz/Dokumenty/tv-nagrywanie/tv-zenity.sh
żeby widzieć, że się nagrywa.

Zatrzymanie nagrywania robi się tak:

Kod: Zaznacz cały

killall mencoder
Jeśli ktoś po użyciu powyższych skryptów nie ma dźwięku w tvtime to można ten program odpalić tak:

Kod: Zaznacz cały

amixer --card 0 set "Line" unmute & amixer --card 0 set "Line" 100% & tvtime
Zadziała tylko gdy używa się dźwięku z karty tv podpiętej kabelkim do Line-in na zewnątrz obudowy.

A i jeśli komuś avidemux nie chce takiego materiału zapisać do kontenera mpg (przy ustawieniu avidemux na video copy i audio copy) to należy go zapisać do formatu avi lub mkv.