Add even more of the source

This should be about everything needed to build so far?
This commit is contained in:
Darren VanBuren 2017-03-07 17:14:16 -08:00
parent af3619d4fa
commit 849723c9cf
547 changed files with 149239 additions and 0 deletions

View file

@ -0,0 +1,127 @@
# This is a StreamingLoadTool config file
#player user agent name
player QTS
# Use the "clienttype" directive to specify whether StreamingLoadTool should make
# RTSP / UDP connections or RTSP / HTTP connections or . Say "http" for
# the latter, "udp" for the former. Say "reliableudp" for reliable UDP.
# Say "tcp" for straight interleaved RTSP / RTP
clienttype udp
# If doing RTSP / HTTP, set droppost to "yes" if you would like StreamingLoadTool
# to drop the POST half of each RTSP / HTTP connection after sending the
# PLAY. "yes" best emulates the "real" client behavior.
droppost yes
# Set this to the # of concurrent clients you would like StreamingLoadTool to maintain(default = 1)
# When not running forever, this is also the number of clients to load before exiting
concurrentclients 1
# Specify a connection port for each connection(default 554)
port 554
# Specify a proxy IP address in dotted-decimal form. If 0, StreamingLoadTool
# will not use a proxy to connect
proxyip 0
# Client window (size of UDP socket buffers). Default = 32768
# For reliable UDP, this affects packet loss and the server's retransmission algorithm
clientwindow 32768
# StreamingLoadTool should send a TEARDOWN after streaming for this # of seconds
movielength 60
# If runforever is set to "no", StreamingLoadTool will quit after finishing the
# list of URLs provided below. If "yes" StreamingLoadTool will loop forever. (Default = no)
runforever no
# Each instance of StreamingLoadTool must have a unique httpcookie value. This
# can also be specified on the command-line (see usage by doing StreamingLoadTool -v) (Default = 1)
httpcookie 1
# Set to "yes" if you would like StreamingLoadTool to generate a connection log
shouldlog yes
# Append junk data after each DESCRIBE request
appendjunk no
# Location to place the connection log
logpath streamingloadtool.log
# Interval in milliseconds between attempts to read media data. For acking
# udp clients, this is also the interval between acks. (Default = 50 milliseconds)
readinterval 10
# how late should packets be allowed to be sent? Value is in seconds.
# 0 = no late tolerance will be specified at all
latetolerance 0
# The "Packet-Range" header is used as an alternative to the standard "Range"
# header on a Play request for specifying a range of packets. Leave
# this line blank to issue a standard play, specify a packet range header
# here to send that instead of standard Range header.
packetplayheader
# The overbuffer window size is the number of K bytes the server can send
# ahead of time. This applies to all transports except "udp".
overbufferwindowsize 5192
# Set this to be the value of the x-RTP-Meta-Info header sent to the server.
# If it is empty, no x-RTP-Meta-Info header will be sent. Otherwise, specify
# the fields you would like to receive
# rtpmetainfo tt;ft;pn;fd;md;sq
# Set this to be the speed you want the streams at (1 = normal speed, 2 = 2x normal speed, etc; float)
speed 1
# Enable this to have StreamingLoadTool randomly thumb around
randomthumb no
# Set sendoptions "yes" to send an OPTIONS request before executing each DESCRIBE request
sendoptions no
# Set requestrandomdata "yes" to send an OPTIONS request with a random data request header before executing each DESCRIBE request
requestrandomdata no
# How many random bytes the server should send in the body of the OPTIONS response
randomdatasize 0
# How often should the client send RTCP messages in milliseconds. (Default = 5000; ACK's in reliableudp are sent ASAP)
rtcpinterval 1000
# List of rtsp URLs for StreamingLoadTool to execute
url rtsp://foo.bar.com/sample.mov
# List of users:passwords for authentication (format: user:password)
user user0:pass0
#The advertised bandwidth in bps (default: not sent)
bandwidth 31235
#The player buffer space per stream in bytes. Default of 0 is unlimited
buffer 15000
#target delay in milliseconds. Default 3000. Use 0 to turn it off
#This is the desired amount of playback time to keep in the buffer.
delay 10000
#Start play time delay; expressed as a fraction of the target delay. This is how much data there should be in the buffer before
#the media starts playing. Use 0.0 to start playing immediately, and 1.0 to start playing when the target delay has been met. Default = 5.0
startdelay 0.5
#Turn on 3GPP features and headers? 3GPP should be not be enabled on reliableudp transport; default = no
enable3GPP yes
# The advertised guarenteed bit rate(GBW), maximum bit rate(MBW), and maximum transfer delay(MTD) for the wireless link
# Units are in kilobits per seconds and milliseconds.
# Default = 0 = no specified value
#GBW 32
#MBW 128
#MTD 2000
# Enable a forced PlayoutDelay value for 3GPP RTCP packets (The value defined for the playoutDelay preference will be sent)
enableForcePlayoutDelay no
# PlayoutDelay value to use if enableForcePlayoutDelay is enabled
playoutDelay 65535

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,31 @@
#!/bin/sh
#
#
echo "SCRIPT $0 [ip address] "
echo "TEST Set a limited bandwidth."
echo ""
ADDRESS="127.0.0.1"
if [ ${1} ]; then
ADDRESS=${1}
echo "Address set. Using $ADDRESS"
else
echo "No Address given. Using $ADDRESS"
fi
ipfw delete pipe 1
ipfw delete pipe 2
ipfw delete set 11
ipfw delete set 12
ipfw pipe 1 config bw 80kbits/s delay 0 queue 100 noerror
ipfw pipe 2 config bw 80kbits/s delay 0 queue 100 noerror
ipfw add 11 set 11 pipe 1 src-ip $ADDRESS proto udp in
ipfw add 12 set 12 pipe 2 src-ip $ADDRESS proto udp out
ipfw set enable 11
ipfw set enable 12
ipfw enable firewall one_pass

View file

@ -0,0 +1,10 @@
echo "SCRIPT $0 "
echo "TEST delete pipes, sets, and disable dummynet rule"
ipfw delete pipe 1
ipfw delete pipe 2
ipfw delete set 11
ipfw delete set 12
ipfw disable firewall one_pass

View file

@ -0,0 +1,73 @@
#!/bin/sh
#
#
echo "SCRIPT $0 [ip address] [down Kbits] [up Kbits] [test seconds] "
echo "TEST Alternate between no bandwidth limits and limited bandwidth with a delay between"
echo ""
ADDRESS="127.0.0.1"
UP="32"
DOWN="100"
SLEEP="30"
if [ ${1} ]; then
ADDRESS=${1}
echo "Address set. Using $ADDRESS"
else
echo "No Address given. Using $ADDRESS"
fi
if [ ${2} ]; then
DOWN=${2}
echo "Down link limit set. Using "$DOWN"kbits/s"
else
echo "No down link limit given. Using "$DOWN"kbits/s"
fi
if [ ${3} ]; then
UP=${3}
echo "Up link limit set. Using "$UP"kbits/s"
else
echo "No up link limit given. Using "$UP"kbits/s"
fi
if [ ${4} ]; then
SLEEP=${4}
echo "Test time set. Using $SLEEP seconds"
else
echo "No test time. Using $SLEEP seconds"
fi
echo "Starting test"
while [ 1 ]
do
ipfw delete pipe 1 2
ipfw delete set 11 12
ipfw disable firewall
echo ""
echo "Bandwidth open - no limit set"
echo "Sleeping $SLEEP seconds"
sleep 30
echo ""
echo "Setting $DOWN kbits down and $UP kbits up"
ipfw pipe 1 config bw "$DOWN"kbits/s delay 0 queue 100 noerror
ipfw pipe 2 config bw "$UP"kbits/s delay 0 queue 100 noerror
ipfw add 11 set 11 pipe 1 src-ip $ADDRESS proto udp in
ipfw add 12 set 12 pipe 2 src-ip $ADDRESS proto udp out
ipfw set enable 11
ipfw set enable 12
ipfw enable firewall one_pass
echo "Sleeping $SLEEP seconds"
sleep 30
done

View file

@ -0,0 +1,6 @@
dir ../APICommonCode
dir ../CommonUtilitiesLib
dir ../OSMemoryLib
dir ../PrefsSourceLib
dir ../RTSPClientLib
handle SIGPIPE nopass nostop noprint

View file

@ -0,0 +1 @@
gdb ./StreamingLoadTool -x gdb_script

View file

@ -0,0 +1,203 @@
#!python
"""Script for parsing the output of a StreamingLoadTool file. Can be used both as a script and as a python module.
The output is a commma separated file. The StreamingLoadTool has to be run with -V 3 or above.
Usage: ParseSLTOut.py [-h] [-b interval] [-s all] [filename]
options:
-h show this help message and exit
-b Take the packet lengths and categorizes them according to their arrival time.
The packet lengths within the same bucket (of size interval seconds) are summed up
and averaged over the interval, which is useful for seeing the bit rate.
-s The streams to parse: one of video, audio, all; default is video
If filename is missing, then the script will read from standard in. The script writes to standard out."""
"""
*
* @APPLE_LICENSE_HEADER_START@
*
* Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*
"""
import re, sys
#the regular expression for matching lines in the SLT output
playRE = re.compile(\
r"^Receiving track (\d+), trackID=(\d+), (\w+) at time (\d+)")
timeRE = re.compile(\
r"^Processing incoming packets at time (\d+)")
processedRE = re.compile(\
r"^Processed packet: track=(\d+), len=(\d+), seq=(\d+), time=(\d+)\((\d+)\); bufferingDelay=(\d+), FBS=(\d+)")
def parseSLTInput(inputFile):
"""
Parses a string consisting of outputs from StreamingLoadTool.
The output is a list, where the index is the track index. The value is a map that maps from processing time to
packets. Each packet is a 3-tuple containing the packet length(in bytes), the sequence number, and the timestamp.
"""
videoTrackIndex = None
audioTrackIndex = None
localTimeBase = None
curTime = None
packetTable = [{}, {}]
for line in inputFile:
matchObj = playRE.match(line)
if matchObj is not None:
trackIndex, trackID, trackType, startTime = matchObj.groups();
if trackType == "video":
videoTrackIndex = int(trackIndex)
elif trackType == "audio":
audioTrackIndex = int(trackIndex)
localTimeBase = int(startTime)
continue
matchObj = timeRE.match(line)
if matchObj is not None:
processingTime, = matchObj.groups()
curTime = int(processingTime)
continue
matchObj = processedRE.match(line)
if matchObj is not None:
trackIndex, packetLen, seqNum, timeStamp, timeStampInMediaTime, playoutDelay, freeBufferSpace = matchObj.groups()
trackIndex = int(trackIndex);
while trackIndex >= len(packetTable):
packetTable.append({})
packetList = packetTable[trackIndex].setdefault(curTime, [])
packetList.append( (int(packetLen), int(seqNum), int(timeStamp)) )
continue
if localTimeBase is None:
sys.exit("Parse error: cannot find a track")
# modify the processing times to be 0-based
newPacketTable = [{}] * len(packetTable)
for trackIndex in range(len(packetTable)):
newPackets = {}
for (curTime, packet) in packetTable[trackIndex].items():
curTime -= localTimeBase
newPackets[curTime] = packet
packetTable[trackIndex] = newPackets
return (packetTable, videoTrackIndex, audioTrackIndex)
def calcBitRate(xList, yList, interval):
"""xList is a list of processing time, and yList is a list of packet size.
The function will calculate the bitrate, divided into interval-sized buckets, and returns it as a list
of (processing time, bitrate) pair.
xList is expected to be a list of time in milliseconds, and yList is expected to be a list of packet size in bytes."""
maxIndex = max(xList) / interval
bitsReceived = [0] * (maxIndex + 1)
for i in range(len(yList)):
x = xList[i]
y = yList[i]
bitsReceived[x / interval] += y * 8
return [ (i * interval, (bitsReceived[i] * 1000) / interval) for i in range(len(bitsReceived))]
if __name__ == "__main__":
# the file is ran as a script
# first parse the command line
import getopt
from decimal import Decimal
try:
optlist, args = getopt.getopt(sys.argv[1:], "hb:s:")
except getopt.GetoptError:
sys.exit(__doc__)
categorize = False
streams = 'video'
for opt, optarg in optlist:
if opt == '-h':
print __doc__
sys.exit(0)
elif opt == '-b':
categorize = True
try:
interval = int(Decimal(optarg) * 1000)
except:
sys.exit(__doc__)
elif opt == '-s':
streams = optarg
if streams != 'video' and streams != 'audio' and streams != 'all':
sys.exit(__doc__)
if len(args) == 0:
inputFile = sys.stdin
elif len(args) == 1:
inputFile = open(args[0], 'r')
else:
sys.exit(__doc__)
(packetTable, videoIndex, audioIndex) = parseSLTInput(inputFile)
if streams == 'video':
if videoIndex is None:
sys.exit("Parse error: Cannot find a video stream")
packets = packetTable[videoIndex]
elif streams == 'audio':
if audioIndex is None:
sys.exit("Parse error: Cannot find an audio stream")
packets = packetTable[audioIndex]
else:
packets = {}
for perStreamPackets in packetTable:
for (time, packetList) in perStreamPackets.items():
packets.setdefault(time, []).extend(packetList)
if len(packets) == 0:
sys.exit("Error: Cannot find a stream")
def millisecondsToSec(time):
"""Convert time to 123.456 form as a string"""
return str(time / 1000) + '.' + str(time % 1000)
if categorize:
xList = []
yList = []
for processingTime, packetList in packets.items():
for (packetLen, seqNum, timeStamp) in packetList:
xList.append(processingTime)
yList.append(packetLen)
data = calcBitRate(xList, yList, interval)
for (time, bitrate) in data:
print "%s, %i" % (millisecondsToSec(time), bitrate)
else:
processingTimes = packets.keys()
processingTimes.sort()
for processingTime in processingTimes:
packetList = packets[processingTime]
for (packetLen, seqNum, timeStamp) in packets[processingTime]:
# output.append( (processingTime, packetLen) )
print ("%s, %i") % ( millisecondsToSec(processingTime), packetLen )

View file

@ -0,0 +1,81 @@
# This is a StreamingLoadTool config file
# Use the "clienttype" directive to specify whether StreamingLoadTool should make
# RTSP / UDP connections or RTSP / HTTP connections or . Say "http" for
# the latter, "udp" for the former. Say "reliableudp" for reliable UDP.
# Say "tcp" for straight interleaved RTSP / RTP
clienttype reliableudp
# If doing RTSP / HTTP, set droppost to "yes" if you would like StreamingLoadTool
# to drop the POST half of each RTSP / HTTP connection after sending the
# PLAY. "yes" best emulates the "real" client behavior.
droppost yes
# Set this to the # of concurrent clients you would like StreamingLoadTool to maintain
concurrentclients 1
# Specify a connection port for each connection
port 554
# Specify a proxy IP address in dotted-decimal form. If 0, StreamingLoadTool
# will not use a proxy to connect
proxyip 0
# Client window (size of UDP socket buffers).
# For reliable UDP, this affects packet loss and the server's
# retransmission algorithm
clientwindow 32768
# StreamingLoadTool should send a TEARDOWN after streaming for this # of seconds
movielength 40
# If runforever is set to "no", StreamingLoadTool will quit after finishing the
# list of URLs provided below. If "yes" StreamingLoadTool will loop forever.
runforever yes
# Each instance of StreamingLoadTool must have a unique httpcookie value. This
# can also be specified on the command-line (see usage by doing StreamingLoadTool -v)
httpcookie 1
# Set to "yes" if you would like StreamingLoadTool to generate a connection log
shouldlog yes
# Append junk data after each DESCRIBE request
appendjunk no
# Location to place the connection log
logpath streamingloadtool.log
# Interval in milliseconds between attempts to read media data. For acking
# udp clients, this is also the interval between acks.
readinterval 10
# how late should packets be allowed to be sent? Value is in seconds.
# 0 = no late tolerance will be specified at all
latetolerance 0
# The "Packet-Range" header is used as an alternative to the standard "Range"
# header on a Play request for specifying a range of packets. Leave
# this line blank to issue a standard play, specify a packet range header
# here to send that instead of standard Range header.
packetplayheader
# The overbuffer window size is the number of K bytes the server can send
# ahead of time. This applies to all transports except "udp".
overbufferwindowsize 5192
# Set this to be the value of the x-RTP-Meta-Info header sent to the server.
# If it is empty, no x-RTP-Meta-Info header will be sent. Otherwise, specify
# the fields you would like to receive
# rtpmetainfo tt;ft;pn;fd;md;sq
# Set this to be the speed you want the streams at (1 = normal speed, 2 = 2x normal speed, etc)
speed 1
# Enable this to have StreamingLoadTool randomly thumb around
randomthumb no
# List of rtsp URLs for StreamingLoadTool to execute
url rtsp://foo.bar.com/sample.mov

View file

@ -0,0 +1,129 @@
# This is a StreamingLoadTool config file
#player user agent name
player QTS
# Use the "clienttype" directive to specify whether StreamingLoadTool should make
# RTSP / UDP connections or RTSP / HTTP connections or . Say "http" for
# the latter, "udp" for the former. Say "reliableudp" for reliable UDP.
# Say "tcp" for straight interleaved RTSP / RTP
# Use "3gudp" for 3gpp rate adaptation over UDP
clienttype reliableudp
# If doing RTSP / HTTP, set droppost to "yes" if you would like StreamingLoadTool
# to drop the POST half of each RTSP / HTTP connection after sending the
# PLAY. "yes" best emulates the "real" client behavior.
droppost yes
# Set this to the # of concurrent clients you would like StreamingLoadTool to maintain(default = 1)
# When not running forever, this is also the number of clients to load before exiting
concurrentclients 1
# Specify a connection port for each connection(default 554)
port 554
# Specify a proxy IP address in dotted-decimal form. If 0, StreamingLoadTool
# will not use a proxy to connect
proxyip 0
# Client window (size of UDP socket buffers). Default = 32768
# For reliable UDP, this affects packet loss and the server's retransmission algorithm
clientwindow 32768
# StreamingLoadTool should send a TEARDOWN after streaming for this # of seconds
movielength 40
# If runforever is set to "no", StreamingLoadTool will quit after finishing the
# list of URLs provided below. If "yes" StreamingLoadTool will loop forever. (Default = no)
runforever yes
# Each instance of StreamingLoadTool must have a unique httpcookie value. This
# can also be specified on the command-line (see usage by doing StreamingLoadTool -v) (Default = 1)
httpcookie 1
# Set to "yes" if you would like StreamingLoadTool to generate a connection log
shouldlog yes
# Append junk data after each DESCRIBE request
appendjunk no
# Location to place the connection log
logpath streamingloadtool.log
# Interval in milliseconds between attempts to read media data. For acking
# udp clients, this is also the interval between acks. (Default = 50 milliseconds)
readinterval 10
# how late should packets be allowed to be sent? Value is in seconds.
# 0 = no late tolerance will be specified at all
latetolerance 0
# The "Packet-Range" header is used as an alternative to the standard "Range"
# header on a Play request for specifying a range of packets. Leave
# this line blank to issue a standard play, specify a packet range header
# here to send that instead of standard Range header.
packetplayheader
# The overbuffer window size is the number of K bytes the server can send
# ahead of time. This applies to all transports except "udp".
overbufferwindowsize 5192
# Set this to be the value of the x-RTP-Meta-Info header sent to the server.
# If it is empty, no x-RTP-Meta-Info header will be sent. Otherwise, specify
# the fields you would like to receive
# rtpmetainfo tt;ft;pn;fd;md;sq
# Set this to be the speed you want the streams at (1 = normal speed, 2 = 2x normal speed, etc; float)
speed 1
# Enable this to have StreamingLoadTool randomly thumb around
randomthumb no
# Set sendoptions "yes" to send an OPTIONS request before executing each DESCRIBE request
sendoptions no
# Set requestrandomdata "yes" to send an OPTIONS request with a random data request header before executing each DESCRIBE request
requestrandomdata no
# How many random bytes the server should send in the body of the OPTIONS response
randomdatasize 0
# How often should the client send RTCP messages in milliseconds. (Default = 5000; ACK's in reliableudp are sent ASAP)
rtcpinterval 1000
# List of rtsp URLs for StreamingLoadTool to execute
url rtsp://foo.bar.com/sample.mov
# List of users:passwords for authentication (format: user:password)
user user0:pass0
#The advertised bandwidth in bps (default: not sent)
bandwidth 50000
#The player buffer space per stream in bytes. Default of 0 is unlimited
buffer 100000
#target delay in milliseconds. Default 3000. Use 0 to turn it off
#This is the desired amount of playback time to keep in the buffer.
delay 10000
#Start play time delay; expressed as a fraction of the target delay. This is how much data there should be in the buffer before
#the media starts playing. Use 0.0 to start playing immediately, and 1.0 to start playing when the target delay has been met. Default = 5.0
#Use -1 for disabled.
startdelay 0.5
#Turn on 3GPP features and headers? 3GPP should be not be enabled on reliableudp transport; default = no
enable3GPP no
# The advertised guarenteed bit rate(GBW), maximum bit rate(MBW), and maximum transfer delay(MTD) for the wireless link
# Units are in kilobits per seconds and milliseconds.
# Default = 0 = no specified value
#GBW 32
#MBW 128
#MTD 2000
# Enable a forced PlayoutDelay value for 3GPP RTCP packets (The value defined for the playoutDelay preference will be sent)
enableForcePlayoutDelay no
# PlayoutDelay value to use if enableForcePlayoutDelay is enabled
playoutDelay 65535