Skip to content
Loffe edited this page Sep 13, 2010 · 11 revisions

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.10

gst_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"
fi

if [ "$mode" == av ] || [ "$mode" == video ] && [ "x$ip" != "x" ]; then
	echo "resolution=$resolution,framerate=$fps"
fi

case $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

Clone this wiki locally