MyTetra Share
Делитесь знаниями!
Как захватывать видео через Pinnacle PCTV Hybrid Pro Stick в Linux
Время создания: 23.01.2024 15:28
Текстовые метки: linux, pinnacle, RCA, композитный, вход, захват, оцифровка, TV, телевизионный, тюнер
Раздел: Компьютер - Linux - Видео в Linux - Работа с видео
Запись: xintrea/mytetra_syncro/master/base/1706012902k6r51luwa5/text.html на raw.github.com

Здесь записываются действия, которые необходимо сделать в Linux для захвата видео через композитный (RCA) вход USB-адаптера Pinnacle PCTV Hybrid Pro Stick.


Вначале надо установить пакеты:



v4l-utils

v4l-conf



Не забыть добавить своего пользователя в группу video и, если есть, в группу usb.


Проверить, что USB-устройство видится в системе:



# lsusb | grep innac

Bus 001 Device 032: ID 2304:0226 Pinnacle Systems, Inc. PCTV 330e



Полная информация об USB-устройстве:



# lsusb -v -d 2304:0226



Посмотреть что увидело ядро: сразу после втыкания в USB дать команду:



# dmesg



Около 50 строк будет написано про данное устройство, так как оно составное:



usb 1-4: new high-speed USB device number 32 using xhci_hcd

usb 1-4: config 1 interface 0 altsetting 1 endpoint 0x82 has invalid wMaxPacketSize 0

usb 1-4: New USB device found, idVendor=2304, idProduct=0226, bcdDevice= 1.10

usb 1-4: New USB device strings: Mfr=3, Product=1, SerialNumber=2

usb 1-4: Product: PCTV 330e

usb 1-4: Manufacturer: Pinnacle Systems

usb 1-4: SerialNumber: 070301868563

mc: Linux media interface: v0.10

videodev: Linux video capture interface: v2.00

em28xx 1-4:1.0: New device Pinnacle Systems PCTV 330e @ 480 Mbps (2304:0226, interface 0, class 0)

em28xx 1-4:1.0: Audio interface 0 found (Vendor Class)

em28xx 1-4:1.0: Video interface 0 found: isoc

em28xx 1-4:1.0: DVB interface 0 found: isoc

em28xx 1-4:1.0: chip ID is em2882/3

em28xx 1-4:1.0: EEPROM ID = 1a eb 67 95, EEPROM hash = 0x32b3abbf

em28xx 1-4:1.0: EEPROM info:

em28xx 1-4:1.0: AC97 audio (5 sample rates)

em28xx 1-4:1.0: 500mA max power

em28xx 1-4:1.0: Table at offset 0x27, strings=0x168e, 0x1ca4, 0x246a

em28xx 1-4:1.0: Identified as Pinnacle Hybrid Pro (330e) (card=56)

em28xx 1-4:1.0: analog set to isoc mode.

em28xx 1-4:1.0: dvb set to isoc mode.

usbcore: registered new interface driver em28xx

em28xx 1-4:1.0: Registering V4L2 extension

tvp5150 11-005c: tvp5150 (4.0) chip found @ 0xb8 (1-4:1.0)

tvp5150 11-005c: tvp5150am1 detected.

tuner: 11-0061: Tuner -1 found with type(s) Radio TV.

xc2028 11-0061: creating new instance

xc2028 11-0061: type set to XCeive xc2028/xc3028 tuner

em28xx 1-4:1.0: firmware: failed to load xc3028-v27.fw (-2)

em28xx 1-4:1.0: Config register raw data: 0xd0

em28xx 1-4:1.0: Direct firmware load for xc3028-v27.fw failed with error -2

em28xx 1-4:1.0: AC97 vendor ID = 0xffffffff

em28xx 1-4:1.0: AC97 features = 0xffff

em28xx 1-4:1.0: Unknown AC97 audio processor detected!

em28xx 1-4:1.0: V4L2 video device registered as video0

em28xx 1-4:1.0: V4L2 VBI device registered as vbi0

em28xx 1-4:1.0: V4L2 extension successfully initialized

em28xx: Registered (Em28xx v4l2 Extension) extension

em28xx 1-4:1.0: Binding audio extension

em28xx 1-4:1.0: em28xx-audio.c: Copyright (C) 2006 Markus Rechberger

em28xx 1-4:1.0: em28xx-audio.c: Copyright (C) 2007-2016 Mauro Carvalho Chehab

em28xx 1-4:1.0: Endpoint 0x83 high-speed on intf 0 alt 7 interval = 8, size 196

em28xx 1-4:1.0: Number of URBs: 1, with 64 packets and 192 size

em28xx 1-4:1.0: Audio extension successfully initialized

em28xx: Registered (Em28xx Audio Extension) extension

em28xx 1-4:1.0: Binding DVB extension

xc2028 11-0061: attaching existing instance

xc2028 11-0061: type set to XCeive xc2028/xc3028 tuner

em28xx 1-4:1.0: xc3028 attached

dvbdev: DVB: registering new adapter (1-4:1.0)

em28xx 1-4:1.0: DVB: registering adapter 0 frontend 0 (Micronas DRXD DVB-T)...

dvbdev: dvb_create_media_entity: media entity 'Micronas DRXD DVB-T' registered.

dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.

em28xx 1-4:1.0: DVB extension successfully initialized

em28xx: Registered (Em28xx dvb Extension) extension

em28xx 1-4:1.0: Registering input extension

Registered IR keymap rc-pinnacle-pctv-hd

rc rc0: Pinnacle Hybrid Pro (330e) as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/rc/rc0

rc rc0: lirc_dev: driver em28xx registered at minor = 0, scancode receiver, no transmitter

input: Pinnacle Hybrid Pro (330e) as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/rc/rc0/input57

em28xx 1-4:1.0: Input extension successfully initialized

em28xx: Registered (Em28xx Input Extension) extension



После втыкания USB-гнездо, должны появиться файлы в каталоге /dev/dvb/adapter0:



crw-rw----+ 1 root video 212, 1 янв 23 13:56 demux0

crw-rw----+ 1 root video 212, 2 янв 23 13:56 dvr0

crw-rw----+ 1 root video 212, 0 янв 23 13:56 frontend0

crw-rw----+ 1 root video 212, 3 янв 23 13:56 net0



В выводе команды dmesg видны ошибки загрузки прошивки (firmware):



em28xx 1-4:1.0: firmware: failed to load xc3028-v27.fw (-2)

...

em28xx 1-4:1.0: Direct firmware load for xc3028-v27.fw failed with error -2



Файл xc3028-v27.fw можно сгенерировать согласно данной статьи: https://mylinuxblog.ru/installation-and-configuration-of-avermedia-mce-116-in-debian-linux/. В ней ссылка на сайт http://www.steventoth.net устарела. Чтобы получить zip-архив, из которого выдергивается hcw85bda.sys, нужно воспользоваться wayback-машиной:



https://web.archive.org/web/20240116213210/http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip



Далее выкачивается perl-скрипт:



wget http://linuxtv.org/hg/v4l-dvb/raw-file/3919b17dc88e/linux/Documentation/video4linux/extract_xc3028.pl



И в каталоге, где лежит этот скрипт, и где лежит файл hcw85bda.sys, дается команда:



perl extract_xc3028.pl



Этот perl-скрипт сгенерирует прошивку xc3028-v27.fw. Почему так сложно? Там были какие-то лицензионные заморочки. Сейчас уже данное устройство настолько устарело, что никому не интересно.



Внимание! Готовый файл прошивки xc3028-v27.fw, прикреплен к этой записи.


Примечание. В сети Интернет можно найти такой же файл:



wget https://beford.org/linux/xc3028-v27.fw



Этот файл такого же размера что и сгенерированный (66220 байт), но отличается парой десятков байт. Если что-то не будет работать, можно попробовать его.



Данный файл надо скопировать в каталог /lib/firmware. После чего компьютер необходимо перегрузить. После перезагрузки вышеуказанных ошибок быть не должно.


Помимо устройств DVB в каталоге /dev/dvb/adapter0, при втыкании тюнера в USB-гнездо, должны появиться файлы следующих устройств:



/dev/media0

/dev/lirc0 - устройство инфракрасного порта (ИК, IR - Infra Red)

/dev/vbi0 - файл, создаваемый подсистемой video4linux

/dev/video0 - видимо, это видеопоток, который берется с RCA/S-Video разъема

/dev/ptmx - виртуальный терминал, через который управляется устройство



Чтобы посмотреть что захватывает RCA-вход, можно попровать программу tvtime. Она по-умолчанию работает с /dev/video0. Если на компьютере есть веб-камера, то скорее всего она будет устройством /dev/video0. А RCA-вход Pinnacle будет /dev/video1. Иногда веб-камера может захватывать два устройства, тогда RCA-вход Pinnacle будет /dev/video2.


Чтобы точно узнать какие файлы принадлежат Pinnacle, можно дать команду:



> v4l2-ctl --list-devices


Pinnacle Hybrid Pro (330e) (usb-0000:00:14.0-3):

/dev/video2

/dev/vbi0

/dev/media1


HP HD Webcam: HP HD Webcam (usb-0000:00:1a.0-1.3):

/dev/video0

/dev/video1

/dev/media0



Таким образом, для просмотра видео с RCA-входа, надо выполнить команду:



tvtime -d /dev/video2



При запуске этой программы изображение может сразу не появиться. Чтобы увидеть изображение, надо сделать соответствующие настройки, например выбрать формат сигнала. Для этого надо вызвать меню кнопкой F1 (закрыть меню можно тоже кнопкой F1). Меню простое, как в телевизоре и интуитивно понятно. Если сделать в нем правильные настройки, изображение появится.


Для записи видео с RCA-входа надо брать поток из устройства /dev/video2 и сохранять его в нужном формате. Сделать это можно через ffmpeg или vlc.


Перед использования захвата, можно узнать возможные форматы видео-потока, которые генерирует устройство:



> v4l-info /dev/video2

general info

VIDIOC_QUERYCAP

driver : "em28xx"

card : "Pinnacle Hybrid Pro (330e)"

bus_info : "usb-0000:00:14.0-3"

version : 5.10.179

capabilities : 0x85230011 [VIDEO_CAPTURE,VBI_CAPTURE,TUNER,AUDIO,?,READWRITE,STREAMING,(null)]

...

video capture

VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)

index : 0

type : VIDEO_CAPTURE

flags : 0

description : "YUYV 4:2:2"

pixelformat : 0x56595559 [YUYV]

VIDIOC_ENUM_FMT(1,VIDEO_CAPTURE)

index : 1

type : VIDEO_CAPTURE

flags : 0

description : "16-bit RGB 5-6-5"

pixelformat : 0x50424752 [RGBP]

VIDIOC_ENUM_FMT(2,VIDEO_CAPTURE)

index : 2

type : VIDEO_CAPTURE

flags : 0

description : "8-bit Bayer RGRG/GBGB"

pixelformat : 0x42474752 [RGGB]

VIDIOC_ENUM_FMT(3,VIDEO_CAPTURE)

index : 3

type : VIDEO_CAPTURE

flags : 0

description : "8-bit Bayer BGBG/GRGR"

pixelformat : 0x31384142 [BA81]

VIDIOC_ENUM_FMT(4,VIDEO_CAPTURE)

index : 4

type : VIDEO_CAPTURE

flags : 0

description : "8-bit Bayer GRGR/BGBG"

pixelformat : 0x47425247 [GRBG]

VIDIOC_ENUM_FMT(5,VIDEO_CAPTURE)

index : 5

type : VIDEO_CAPTURE

flags : 0

description : "8-bit Bayer GBGB/RGRG"

pixelformat : 0x47524247 [GBRG]

VIDIOC_ENUM_FMT(6,VIDEO_CAPTURE)

index : 6

type : VIDEO_CAPTURE

flags : 0

description : "Planar YUV 4:1:1"

pixelformat : 0x50313134 [411P]

VIDIOC_G_FMT(VIDEO_CAPTURE)

type : VIDEO_CAPTURE

fmt.pix.width : 720

fmt.pix.height : 576

fmt.pix.pixelformat : 0x56595559 [YUYV]

fmt.pix.field : INTERLACED

fmt.pix.bytesperline : 1440

fmt.pix.sizeimage : 829440

fmt.pix.colorspace : SMPTE170M

fmt.pix.priv : 4276996862



Для захвата изображения может сработать следующая команда:



ffmpeg -f v4l2 -i /dev/video2 file.avi



Если она не срабатывает, надо играться с опцией -f чтобы задать входной формат. Можно попробовать ее вообще убрать, должно сработать автоопределение формата потока.


https://archlinux.org.ru/forum/topic/12799/


Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования