2017-05-27 1 views
1

Ich benutze gstreamer, um Audio von Dateien/RTMP/RTSP Streams zu konvertieren und dann zu analysieren.Gstreamer Abspielen von Audio aus Videodatei mit (uri) decoderbin - hohe CPU-Auslastung

Das Problem ist, wenn meine Quelldatei Video oder Videostream gstreamer viel CPU verwendet.

Beispiel 1 (Video) - verwendet 30-35% der CPU, wie htop sagt.

gst-launch-1.0 uridecodebin uri='test.mp4' ! autoaudiosink 

Beispiel 2 (Audio von Video-Datei, die oben mit ffmpeg umgewandelt -c kopieren) - verwendet 2-4% der CPU-

gst-launch-1.0 uridecodebin uri='test.mp3' ! autoaudiosink 

Wie kann ich angeben, dass ich nur Audioquelle muß aus dem Video Datei?

Ich benutze decoderbin, weil ich nicht weiß, welche Dateien (Formate) ich von Benutzern bekomme.

Antwort

1

für die obigen Beispiele Sie playbin ein Satz der Flags-Eigenschaft verwenden:

flags    : Flags to control behaviour 
         flags: readable, writable 
         Flags "GstPlayFlags" Default: 0x00000617, "soft-colorbalance+deinterlace+soft-volume+text+audio+video" 
          (0x00000001): video   - Render the video stream 
          (0x00000002): audio   - Render the audio stream 
          (0x00000004): text    - Render subtitles 
          (0x00000008): vis    - Render visualisation when no video is present 
          (0x00000010): soft-volume  - Use software volume 
          (0x00000020): native-audio  - Only use native audio formats 
          (0x00000040): native-video  - Only use native video formats 
          (0x00000080): download   - Attempt progressive download buffering 
          (0x00000100): buffering  - Buffer demuxed/parsed data 
          (0x00000200): deinterlace  - Deinterlace video if necessary 
          (0x00000400): soft-colorbalance - Use software color balance 

Wenn Sie Audio extrahieren möchten und umcodieren es, müssen Sie wahrscheinlich einige Code schreiben.

+2

Ich habe bereits eine funktionierende Pipeline mit decoderbin und appsink, die mir Zugang zu rohen transcodierten PCM16 16khz Audio gibt, danke! Seem ist wie ich das Problem gefunden habe. Decodebin2 (das übrigens in playbin verwendet wird) dekodiert alle Ströme, die es in Quelldatei/Stream/etc finden kann. Scheint so, als würde decoderbin3, das gerade entwickelt wird, diese nutzlose CPU-Nutzung loswerden. –

Verwandte Themen