A stream.place VOD client inspired by icarly.com
1#!/bin/bash
2
3# Test script for stream.place VOD playback
4# Usage: ./scripts/test-playback-cli.sh
5
6set -e
7
8BASE_URL="https://vod-beta.stream.place/xrpc"
9VIDEO_URI="at://did:plc:rbvrr34edl5ddpuwcubjiost/place.stream.video/3miah6keewv2n"
10
11echo "=========================================="
12echo "stream.place VOD Playback Test"
13echo "=========================================="
14echo ""
15
16echo "Testing: Video Playlist (Master)"
17echo "URL: ${BASE_URL}/place.stream.playback.getVideoPlaylist?uri=..."
18echo ""
19
20PLAYLIST=$(curl -s "${BASE_URL}/place.stream.playback.getVideoPlaylist?uri=$(echo "$VIDEO_URI" | jq -sRr @uri)")
21
22if echo "$PLAYLIST" | grep -q "#EXTM3U"; then
23 echo "✓ Valid HLS playlist"
24else
25 echo "✗ Invalid playlist"
26 exit 1
27fi
28
29if echo "$PLAYLIST" | grep -q "#EXT-X-STREAM-INF"; then
30 echo "✓ Contains stream variants"
31else
32 echo "✗ No stream variants found"
33fi
34
35TRACK_URL=$(echo "$PLAYLIST" | grep -A1 "#EXT-X-STREAM-INF" | tail -1)
36echo ""
37echo "Track URL (relative): $TRACK_URL"
38
39if [[ "$TRACK_URL" == place.stream.playback.* ]]; then
40 FULL_TRACK_URL="${BASE_URL}/${TRACK_URL}"
41 echo "Full Track URL: $FULL_TRACK_URL"
42else
43 FULL_TRACK_URL="${BASE_URL}/${TRACK_URL}"
44 echo "Track URL (absolute): $FULL_TRACK_URL"
45fi
46
47echo ""
48echo "Testing: Video Track Playlist (track=1)"
49echo ""
50
51TRACK1=$(curl -s "$FULL_TRACK_URL")
52
53if echo "$TRACK1" | grep -q "#EXT-X-PLAYLIST-TYPE:VOD"; then
54 echo "✓ Valid VOD playlist"
55else
56 echo "✗ Not a VOD playlist"
57fi
58
59if echo "$TRACK1" | grep -q "#EXTINF"; then
60 SEGMENTS=$(echo "$TRACK1" | grep -c "#EXTINF")
61 echo "✓ Contains $SEGMENTS segments"
62else
63 echo "✗ No segments found"
64fi
65
66BLOB_URL=$(echo "$TRACK1" | grep "place.stream.playback.getVideoBlob" | head -1)
67echo ""
68echo "First segment URL: $BLOB_URL"
69
70if [[ -n "$BLOB_URL" ]]; then
71 FULL_BLOB_URL="${BASE_URL}/${BLOB_URL}"
72 echo "Full blob URL: $FULL_BLOB_URL"
73
74 echo ""
75 echo "Testing: Video Blob (HEAD request)"
76 RESPONSE=$(curl -s -I "$FULL_BLOB_URL")
77
78 if echo "$RESPONSE" | grep -q "HTTP/.* 200"; then
79 echo "✓ Blob accessible"
80
81 CONTENT_TYPE=$(echo "$RESPONSE" | grep -i "content-type:" | tr -d '\r')
82 echo " Content-Type: $CONTENT_TYPE"
83
84 CONTENT_LENGTH=$(echo "$RESPONSE" | grep -i "content-length:" | tr -d '\r')
85 echo " Content-Length: $CONTENT_LENGTH"
86 else
87 echo "✗ Blob not accessible"
88 echo "$RESPONSE"
89 fi
90fi
91
92echo ""
93echo "=========================================="
94echo "Test complete!"
95echo "=========================================="