미디어 재생/일시 중지 이벤트 감지

미디어 재생/일시 중지 이벤트 감지

헤드폰을 분리한 후 재생을 일시 중지했다가 다시 연결한 후 재생을 재개하고 싶습니다.

내 현재 솔루션은 ACPI를 사용하여 그림과 같이 플러그/플러그 해제를 감지합니다.여기. 재생을 재생/일시 중지하려면 를 사용합니다 xdotool key XF86AudioPlay.

이 솔루션은 다음과 같은 기본적인 경우에 잘 작동합니다.

  • 음악이 재생 중이고 헤드폰이 연결되어 있습니다.
  • 헤드폰이 분리되었습니다.=>음악이 일시중지되었습니다.
  • 헤드폰이 다시 연결됨=>음악은 계속 재생됩니다.

하지만 그렇지 않은 경우 재생을 재개하고 싶지 않습니다.긍정적인헤드폰을 분리한 경우.

다음 시나리오를 상상해 보세요.

  • 헤드폰을 연결하고 컴퓨터를 시작하십시오.
  • 음악을 재생,
  • 음악 일시중지,
  • 헤드폰을 뽑으세요.
  • 헤드폰을 다시 연결하십시오.

마지막 부분이 문제입니다. 헤드폰을 분리했을 때 재생이 활성화되지 않았더라도 헤드폰을 다시 연결하면 재생이 다시 시작됩니다.

또한 내 시스템에서는 xdotool key XF86AudioPlay재생만 전환하고 xdotool key XF86AudioPause아무 작업도 수행하지 않습니다. 이로 인해 상황이 더욱 악화됩니다.

  • 헤드폰을 착용하고 컴퓨터를 시작하세요.
  • 음악을 재생,
  • 음악 일시중지,
  • 헤드폰을 뽑다(음악이 재생되기 시작합니다!).

그래서 나에게 필요한 것은재생/일시중지/중지 이벤트 감지가능한 모든 상황에서 올바르게 반응할 수 있도록 플러그/플러그 해제 이벤트를 제공합니다.

이 상태 머신은 필요한 작업을 설명합니다. FSM 일시 중지 플러그를 뽑습니다.


떠오른 아이디어 중 하나는 재생/일시 중지/중지 키보드 단축키를 다시 바인딩하여 상태 시스템 논리를 추가하는 것입니다. 단점은 게임을 한다는 것이다.언제나이러한 키보드 단축키는 예를 들어 제어 대신 사용해야 합니다. 약간 비실용적인 리듬박스 버튼입니다.

또한 플레이 중에 Rhythmbox를 닫으면 상태 머신이 특정 playing상태로 유지됩니다. 물론 Rhythmbox가 종료될 때까지 기다린 다음 상태를 stopped. 그런데 음악을 재생하는 것이 Rhythmbox가 아니라 VLC 등이라면 어떨까요? 이 접근 방식은 추악하고 신뢰할 수 없으므로 피하고 싶습니다.


내 질문:미디어 재생이 일시 중지/재개/중지되는 시점을 어떻게 감지합니까?

답변1

pacmd list-sink-inputs한 가지 옵션은 예를 들어 (보기 ) 를 사용하여 Pulseaudio 스트림의 상태를 확인하거나 state선택한 프로그래밍 언어를 사용하여 Pulseaudio 악마와 직접 상호 작용하는 것입니다.

플레이어 자체가 일시 중지된 경우 미디어 플레이어가 스트림을 일시 중지해야 합니다( state에서 로 변경됨 ). 일부 미디어 플레이어는 이 작업을 수행할 수도 있고 일부는 그렇지 않을 수도 있습니다.RUNNINGCORKED

관련 정보