http를 통해 Linux 프레임 버퍼를 비디오로 스트리밍하는 방법

http를 통해 Linux 프레임 버퍼를 비디오로 스트리밍하는 방법

나는 프레임버퍼 UI(X11 없음)와 실행 중인 웹 서버를 갖춘 임베디드 Linux 시스템(yocto 기반)을 가지고 있습니다.

이제 화면 내용을 웹 페이지로 "미러링"하는 방법을 묻습니다. 카메라에서 나오는 스트림 대신 /dev/fb0.

당연한 것 같지만 내 웹 검색에서 일치하는 항목이 발견되지 않았습니다. 진행하는 방법을 알고 있나요?

답변1

Linux 프레임버퍼 비디오는 ffmpeg를 통해 제공됩니다.fbdev장비.

> ffprobe -f fbdev -i '/dev/fb0'                                                                           
[fbdev @ 0x2308100] w:1920 h:1080 bpp:32 pixfmt:bgra fps:25/1 bit_rate:1658880000
[fbdev @ 0x2308100] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, fbdev, from '/dev/fb0':
  Duration: N/A, start: 1673953008.518392, bitrate: 1658880 kb/s
  Stream #0:0: Video: rawvideo (BGRA / 0x41524742), bgra, 1920x1080, 1658880 kb/s, 25 fps, 1000k tbr, 1000k tbn

이는 테스트에 유용할 수 있는 비디오 소스에 대한 일부 메타데이터를 알려줍니다. 일반적인 비디오 트랜스코딩 ffprobe으로 대체합니다 .ffmpeg

> ffmpeg -f fbdev -i '/dev/fb0' -f matroska -crf 0 -filter:v 'scale=-1:720' - | mpv

이렇게 하면 인코딩된 비디오 스트림이 로 전송되며 stdout몇 초 동안 버퍼링된 후 재생됩니다. mpvSSH를 통해 헤드리스 서버에 액세스할 수 있는 경우 이 파이프 기술을 재사용하고 다음을 수행할 수 있습니다.

ssh server ffmpeg -f fbdev -i '/dev/fb0' -f matroska -crf 0 -filter:v 'scale=-1:720' - | mpv

이는 GUI와 비디오 플레이어가 설치되어 있고( mpv위 예에서) SSH 액세스 권한이 있는 시스템에서 실행되어야 합니다 server. 또는 비디오 스트림이 HTTP를 통해 노출될 수 있습니다. 보고 있다이것예를 들어 다음과 같이 대답할 수 있습니다.

ffmpeg -f fbdev -i '/dev/fb0' -f mp4 -movflags frag_keyframe+empty_moov -listen 1 http://localhost:8080/

이로 인해 ffmpeg는 즐겨 사용하는 비디오 플레이어를 가리킬 수 있는 일회용 웹 서버가 됩니다 vlc http://localhost:8080/.

적합한 스트리밍 웹 서버를 만드는 것은 더 큰 주제이며 많은 방문자를 확보하고 다양한 장치를 지원할 계획이라면 잘 수행하기 어려울 수 있습니다. 테마는 것 같습니다답변됨 많은 종류의 이류, 그러나 다른 비디오 소스의 경우.

이것이 여러분에게 올바른 방향으로 나아가는 한 걸음이 되기를 바랍니다.

참고: 테스트할 때 프레임 버퍼 내용을 엉망으로 만들고 싶다면 발행 cat /dev/urandom >/dev/fb0하고cat /dev/zero >/dev/fb0

관련 정보