2017-05-27 1 views
1

J'utilise gstreamer pour convertir l'audio à partir de fichiers/flux RTMP/RTSP, puis l'analyser.Gstreamer lecture audio à partir d'un fichier vidéo avec (uri) décodebin - utilisation élevée du processeur

Le problème est que si mon fichier source est une vidéo ou un flux vidéo, gstreamer utilise beaucoup de CPU.

Exemple 1 (vidéo) - utilise 30 à 35% du processeur comme indiqué par htop.

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

Exemple 2 (audio à partir du fichier vidéo ci-dessus converti avec ffmpeg -c copie) - utilise 2-4% du CPU

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

Comment puis-je préciser que je ne ai besoin source audio de la vidéo fichier? J'utilise décodeur parce que je ne sais pas quels fichiers (formats) je vais obtenir des utilisateurs.

Répondre

1

pour les exemples ci-dessus, vous pouvez utiliser un playbin définir la propriété drapeaux:

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 

Si vous voulez extraire l'audio et transcoder, vous avez probablement besoin d'écrire du code.

+2

J'ai déjà un pipeline de travail avec decodebin et appsink, ce qui me donne accès à de l'audio pcm16 16khz transcodé brut, merci! On dirait que j'ai trouvé le problème. Decodebin2 (qui est d'ailleurs utilisé dans playbin) décode tous les flux qu'il peut trouver dans le fichier source/stream/etc. On dirait que decodebin3 qui est en cours de développement va maintenant se débarrasser de cette utilisation inutile du processeur. –