-
Notifications
You must be signed in to change notification settings - Fork 0
GStreamer
Det som begränsar prestandan mest för gstreamer är bandbredden i nätverket samt kvalitet på videon. Genom att köra med lägre upplösning flyter det bättre. Netlogon varierar också från dag till dag ganska mycket. Se till att ställa in full wlan-effekt (100mW) samt att ställa ner power saving från maximum till intermediate eller off.
Att skicka video med via python-gstreamer innebär ingen större prestandaförsämring jämfört med att använda gst-launch. Det är upplösningen och nätverket som påverkar upplevelsen.
Ett annat problem som jag inte lyckats lösa är att skicka ljud och bild i samma ström. Det bör gå, men jag har inte hittat någon kombination av ljud och bild-kodek på N810 som kan muxas ihop till en udp-ström. Det går istället att skicka ljud och bild som två separata strömmar men det är egentligen inte en bra lösning.
Nedanstående kommando listar alla gstreamer-plugins som N810 klarar av:
Nokia-N810-43-7:~# gst-inspect-0.10gst_test nedan är ett script som använder sig av gst_launch för att testa att skicka samt ta emot ljud och/eller bild i olika kvalitet. Den ena enheten skickar och den andra tar emot. Det går att ställa in kvaliteten genom att skicka med argument till scriptet:
| N810 A | N810 B |
|---|---|
| ip 130.236.216.4 | ip 130.236.216.145 |
| skicka bild | visa bild |
| ./gst_test.sh video 130.236.216.145 | ./gst_test.sh video |
| ./gst_test.sh video 130.236.216.145 high | ./gst_test.sh video |
| ./gst_test.sh video 130.236.216.145 medium 30/1 | ./gst_test.sh video |
| skicka ljud | spela upp ljud |
| ./gst_test.sh audio 130.236.216.145 | ./gst_test.sh audio |
| skicka bild och ljud | visa bild och ljud |
| ./gst_test.sh av 130.236.216.145 low | ./gst_test.sh av |
gst_test.sh
#!/bin/bash mode=$1 ip=$2 quality=$3 fps="8/1" if [ "x$RES" != x ]; then resolution=$RES fi if [ "x$4" != x ]; then fps=$4 fi if [ "$quality" == higher ]; then resolution="width=640,height=480" fi if [ "$quality" == high ]; then resolution="width=320,height=240" fi if [ "$quality" == medium ]; then resolution="width=176,height=144" fi if [ "$quality" == low ]; then resolution="width=128,height=96" fiif [ "$mode" == av ] || [ "$mode" == video ] && [ "x$ip" != "x" ]; then echo "resolution=$resolution,framerate=$fps" ficase $mode in audio) if [ "x$ip" != "x" ]; then echo "Sending audio" gst-launch-0.10 dsppcmsrc ! audioconvert ! mulawenc \ ! rtppcmupay ! udpsink host=$ip port=5434 else echo "Listening for audio" gst-launch-0.10 udpsrc port=5434 caps=application/x-rtp \ ! rtppcmudepay ! mulawdec ! autoaudiosink fi ;; video) if [ "x$ip" != "x" ]; then echo "Sending video" gst-launch-0.10 v4l2src ! video/x-raw-yuv,$resolution, \ framerate=$fps ! hantro4200enc ! rtph263pay \ ! udpsink host=$ip port=5434 else echo "Listening for video" gst-launch-0.10 udpsrc port=5434 caps=application/x-rtp \ ! rtph263depay ! hantro4100dec ! xvimagesink fi ;; av) if [ "x$ip" != "x" ]; then echo "Sending audio & video" gst-launch-0.10 \ dsppcmsrc ! audioconvert ! mulawenc ! rtppcmupay\ ! udpsink host=$ip port=5433 &gst-launch-0.10 \ v4l2src ! video/x-raw-yuv,$resolution,framerate=$fps\ ! hantro4200enc ! rtph263pay ! udpsink host=$ip port=5434 else echo "Listening for audio & video" gst-launch-0.10 \ udpsrc port=5433 caps=application/x-rtp ! rtppcmudepay\ ! mulawdec ! autoaudiosink & gst-launch-0.10 \ udpsrc port=5434 caps=application/x-rtp ! rtph263depay\ ! hantro4100dec ! xvimagesink fi ;; *) echo "usage: $0 (audio | video | av) [ip] [low | medium | high | higher] [framerate]" echo "Sends video over udp at port 5434 and audio at port 5433" ;; esac