임베디드 Linux에서 ffplay를 사용하여 미디어 파일을 재생하는 방법은 무엇입니까?

임베디드 Linux에서 ffplay를 사용하여 미디어 파일을 재생하는 방법은 무엇입니까?

저는 현재 LCD와 스피커를 포함하는 임베디드 Linux 시스템(kernel-5.10.24)을 개발 중입니다.

현재 저는 ffmpeg와 ffplay를 사용하여 SDL을 사용하지 않고 미디어 파일 재생을 테스트하고 있습니다. 처음에는 다음을 시도했지만 오류가 발생했습니다.

# ffplay /test.mp4
ffplay version 4.2.2 Copyright (c) 2003-2019 the FFmpeg testers
  built with gcc 7.2.0 (GNU Linux-Release5.0.0.0-Default(ARMv5))
  configuration: --enable-cross-compile --cross-prefix=/test/armv5/gitdir/linux_gnu_armv5/out/product/fooarmv5.tea5.10-eng/obj/bin/arm-linux-gnu- --sysroot=/test/armv5/gitdir/linux_gnu_armv5/out/product/fooarmv5.tea5.10-eng/obj/host/arm-linux-gnu/sysroot --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --disable-stripping --pkg-config=/test/armv5/gitdir/linux_gnu_armv5/out/product/fooarmv5.tea5.10-eng/obj/host/bin/pkg-config --disable-static --enable-shared --prefix=/usr --enable-avfilter --disable-version3 --enable-logging --enable-optimizations --disable-extra-warnings --enable-avdevice --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small --enable-dct --enable-fft --enable-mdct --enable-rdft --disable-crystalhd --disable-dxva2 --enable-runtime-cpudetect --disable-hardcoded-tables --disable-msa --enable-hwaccels --disable-cuda --disable-cuvid --disable-nvenc --disable-avisynth --disable-frei0r --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libdc1394 --disable-libgsm --disable-libilbc --disable-libvo-amrwbenc --disable-symver --disable-doc --disable-gpl --disable-nonfree --enable-ffmpeg --enable-ffplay --enable-avresample --disable-ffprobe --disable-libxcb --disable-postproc --enable-swscale --enable-indevs --enable-alsa --enable-outdevs --enable-pthreads --enable-zlib --enable-lzo --disable-bzlib --disable-libfdk-aac --disable-libcdio --disable-gnutls --enable-openssl --enable-libdrm --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-mmal --disable-omx --disable-omx-rpi --disable-libopencv --disable-libopus --disable-libvpx --disable-libass --disable-libbluray --disable-libmfx --disable-librtmp --disable-libmp3lame --disable-libmodplug --disable-libspeex --disable-libtheora --disable-libwavpack --disable-iconv --enable-libfreetype --disable-fontconfig --disable-libopenjpeg --disable-libx264 --disable-libx265 --disable-libdav1d --disable-libvo_amrwbenc --disable-libopencore-amrwb --disable-x86asm --disable-mmx --disable-sse --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-avx --disable-avx2 --disable-armv6 --disable-armv6t2 --disable-vfp --disable-neon --disable-altivec --extra-libs=-latomic --enable-pic --cpu=armv5
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)

실행할 때 동일한 오류가 발생했습니다 ffplay /test.mp4.
하지만 동영상을 재생할 수는 있어요 ffmpeg -re -i /test.mp4 -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0.

이 임베디드 시스템에는 libSDL이나 X가 없습니다.

그럼 어떻게 MP4를 재생할 수 있나요 ffplay? 더 중요한 것은 ffplay시스템에서 MP3 파일을 재생하는 방법 입니다.

mpv를 시도했습니다.

# mpv -vo help
Available video outputs:
  libmpv           render API for libmpv
  gpu              Shader-based GPU Renderer
  null             Null video output
  image            Write video frames to image files
  tct              true-color terminals
  drm              Direct Rendering Manager

Segmentation fault

그런 다음 mp4를 재생해 보세요.

# mpv ./Quad_split.mp4
Compiled without libass.
There will be no OSD and no text subtitles.
Playing: ./test.mp4
 (+) Video --vid=1 (*) (h264 852x480 29.895fps)
Error opening/initializing the selected video_out (--vo) device.
Video: no video
No video or audio streams selected.


Exiting... (Errors when loading file)
Segmentation fault

/dev/fb를 찾을 수 없어서 다음을 시도했습니다.

# mpv --vo image /root/test.mp4
Compiled without libass.
There will be no OSD and no text subtitles.
Playing: /root/test.mp4
 (+) Video --vid=1 (*) (h264 852x480 29.895fps)
VO: [image] 852x480 yuv420p
[vo/image] Saving 00000001.jpg
V: 00:00:00 / 00:00:09 (0%)
[vo/image] Saving 00000002.jpg
V: 00:00:00 / 00:00:09 (1%)
[vo/image] Saving 00000003.jpg
V: 00:00:00 / 00:00:09 (1%)
[vo/image] Saving 00000004.jpg
V: 00:00:00 / 00:00:09 (1%)
[vo/image] Saving 00000005.jpg
V: 00:00:00 / 00:00:09 (2%)
[vo/image] Saving 00000006.jpg
V: 00:00:00 / 00:00:09 (2%)
[vo/image] Saving 00000007.jpg
V: 00:00:00 / 00:00:09 (2%)
[vo/image] Saving 00000008.jpg

현재 디렉토리에 다수의 JPG 파일이 생성되어 프로그램이 mpv어느 정도 작동할 수 있음을 나타냅니다.

mpv그렇다면 이 임베디드 시스템(X 및 VT 없이)에서 어떻게 작동하게 만들 수 있을까요 ? 비디오를 재생하려면 libmpv를 사용하여 인코딩을 수행해야 합니까 /dev/fb?

관련 정보