【目标实现】
使用rk3576播放mp4视频
【硬件】
米尔MYD-LR4576开发板
【软件实现】
#!/usr/bin/env python3
"""纯 GStreamer 方案:硬解 → appsink → Qt 显示 + 独立音频播放(无需 OpenCV GStreamer 支持)"""
import sys
import os
import signal
import subprocess
import numpy as np
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton, QHBoxLayout
from PySide6.QtGui import QImage, QPixmap
from PySide6.QtCore import Qt, QThread, Signal
# GStreamer 初始化
import gi
gi.require_version('Gst', '1.0')
gi.require_version('GstApp', '1.0')
from gi.repository import Gst, GstApp, GLib
Gst.init(None)
VIDEO_PATH = "/userdata/mypro/pro/videos/intro_guide.mp4"
TARGET_W, TARGET_H = 800, 600
class AudioPlayer:
"""独立音频播放器:使用 gst-launch-1.0 播放音频"""
def __init__(self, video_path):
self.video_path = video_path
self.proc = None
def start(self):
if self.proc and self.proc.poll() is None:
return # 已在播放
# 构建音频管道:提取音频并播放到 ALSA
cmd = [
"gst-launch-1.0",
"filesrc", f"location={self.video_path}",
"!", "qtdemux", "name=d",
"d.audio_0", "!", "queue",
"!", "decodebin",
"!", "audioconvert",
"!", "alsasink",
"device=hw:0,0",
"sync=false"
]
# 后台静默运行,创建新进程组便于终止
self.proc = subprocess.Popen(
cmd,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
preexec_fn=os.setsid
)
print("
我要赚赏金
