annotate libmpdemux/asf_mmst_streaming.c @ 11402:b0c13371ebdf

remove uncommon langinfo code and replace it by more common setlocal. patch by Steven M. Schultz <sms@2BSD.COM>
author alex
date Thu, 06 Nov 2003 22:28:55 +0000
parents 007ec48cf146
children 86ab7e0b2a65
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
1 // mmst implementation taken from the xine-mms plugin made by majormms (http://geocities.com/majormms/)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
2 //
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
3 // ported to mplayer by Abhijeet Phatak <abhijeetphatak@yahoo.com>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
4 // date : 16 April 2002
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
5 //
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
6 // information about the mms protocol can be find at http://get.to/sdp
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
7 //
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
8
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
9
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
10 #include <stdio.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
11 #include <stdlib.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
12 #include <string.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
13 #include <unistd.h>
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
14 #include <errno.h>
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
15 #include <inttypes.h>
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
16
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
17 #include "config.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
18
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
19 #ifndef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
20 #define closesocket close
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
21 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
22 #include <winsock2.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
23 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
24
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
25 #ifdef USE_ICONV
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
26 #include <locale.h>
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
27 #include <iconv.h>
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
28 #endif
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
29
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
30 #include "url.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
31 #include "asf.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
32
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
33 #include "stream.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
34
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
35 #include "network.h"
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
36
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
37 #define BUF_SIZE 102400
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
38
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
39 typedef struct
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
40 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
41 uint8_t buf[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
42 int num_bytes;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
43
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
44 } command_t;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
45
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
46 static int seq_num;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
47 static int num_stream_ids;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
48 static int stream_ids[20];
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
49
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
50 static int get_data (int s, char *buf, size_t count);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
51
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
52 static void put_32 (command_t *cmd, uint32_t value)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
53 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
54 cmd->buf[cmd->num_bytes ] = value % 256;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
55 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
56 cmd->buf[cmd->num_bytes+1] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
57 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
58 cmd->buf[cmd->num_bytes+2] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
59 value = value >> 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
60 cmd->buf[cmd->num_bytes+3] = value % 256 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
61
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
62 cmd->num_bytes += 4;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
63 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
64
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
65 static uint32_t get_32 (unsigned char *cmd, int offset)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
66 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
67 uint32_t ret;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
68
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
69 ret = cmd[offset] ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
70 ret |= cmd[offset+1]<<8 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
71 ret |= cmd[offset+2]<<16 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
72 ret |= cmd[offset+3]<<24 ;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
73
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
74 return ret;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
75 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
76
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
77 static void send_command (int s, int command, uint32_t switches,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
78 uint32_t extra, int length,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
79 char *data)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
80 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
81 command_t cmd;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
82 int len8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
83
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
84 len8 = (length + 7) / 8;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
85
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
86 cmd.num_bytes = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
87
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
88 put_32 (&cmd, 0x00000001); /* start sequence */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
89 put_32 (&cmd, 0xB00BFACE); /* #-)) */
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
90 put_32 (&cmd, len8*8 + 32);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
91 put_32 (&cmd, 0x20534d4d); /* protocol type "MMS " */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
92 put_32 (&cmd, len8 + 4);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
93 put_32 (&cmd, seq_num);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
94 seq_num++;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
95 put_32 (&cmd, 0x0); /* unknown */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
96 put_32 (&cmd, 0x0);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
97 put_32 (&cmd, len8+2);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
98 put_32 (&cmd, 0x00030000 | command); /* dir | command */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
99 put_32 (&cmd, switches);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
100 put_32 (&cmd, extra);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
101
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
102 memcpy (&cmd.buf[48], data, length);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
103 if (length & 7)
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
104 memset(&cmd.buf[48 + length], 0, 8 - (length & 7));
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
105
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
106 if (send (s, cmd.buf, len8*8+48, 0) != (len8*8+48)) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
107 printf ("write error\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
108 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
109 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
110
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
111 #ifdef USE_ICONV
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
112 static iconv_t url_conv;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
113
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
114 static void string_utf16_open() {
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
115 setlocale(LC_CTYPE, "");
11402
b0c13371ebdf remove uncommon langinfo code and replace it by more common setlocal. patch by Steven M. Schultz <sms@2BSD.COM>
alex
parents: 11350
diff changeset
116 url_conv = iconv_open("UTF-16LE",setlocale(LC_CTYPE, NULL));
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
117 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
118
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
119 static void string_utf16_close() {
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
120
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
121 iconv_close(url_conv);
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
122 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
123
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
124 static void string_utf16(char *dest, char *src, int len) {
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
125 size_t len1, len2;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
126 char *ip, *op;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
127
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
128 memset(dest, 0, 1000);
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
129 len1 = len; len2 = 1000;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
130 ip = src; op = dest;
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
131
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
132 iconv(url_conv, &ip, &len1, &op, &len2);
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
133 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
134
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
135 #else
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
136
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
137 static void string_utf16_open() {
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
138 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
139
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
140 static void string_utf16_close() {
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
141 }
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
142
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
143 static void string_utf16(char *dest, char *src, int len)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
144 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
145 int i;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
146
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
147 for (i=0; i<len; i++) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
148 dest[i*2] = src[i];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
149 dest[i*2+1] = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
150 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
151
11226
alex
parents: 11225
diff changeset
152 /* trailing zeroes */
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
153 dest[i*2] = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
154 dest[i*2+1] = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
155 }
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
156 #endif
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
157
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
158 static void get_answer (int s)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
159 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
160 char data[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
161 int command = 0x1b;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
162
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
163 while (command == 0x1b) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
164 int len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
165
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
166 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
167 if (!len) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
168 printf ("\nalert! eof\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
169 return;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
170 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
171
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
172 command = get_32 (data, 36) & 0xFFFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
173
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
174 if (command == 0x1b)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
175 send_command (s, 0x1b, 0, 0, 0, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
176 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
177 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
178
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
179 static int get_data (int s, char *buf, size_t count)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
180 {
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
181 ssize_t len;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
182 size_t total = 0;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
183
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
184 while (total < count) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
185
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
186 len = recv (s, &buf[total], count-total, 0);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
187
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
188 if (len<0) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
189 perror ("read error:");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
190 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
191 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
192
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
193 total += len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
194
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
195 if (len != 0) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
196 // printf ("[%d/%d]", total, count);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
197 fflush (stdout);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
198 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
199
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
200 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
201
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
202 return 1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
203
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
204 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
205
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
206 static int get_header (int s, uint8_t *header, streaming_ctrl_t *streaming_ctrl)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
207 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
208 unsigned char pre_header[8];
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
209 int header_len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
210
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
211 header_len = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
212
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
213 while (1) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
214 if (!get_data (s, pre_header, 8)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
215 printf ("pre-header read failed\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
216 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
217 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
218 if (pre_header[4] == 0x02) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
219
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
220 int packet_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
221
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
222 packet_len = (pre_header[7] << 8 | pre_header[6]) - 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
223
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
224 // printf ("asf header packet detected, len=%d\n", packet_len);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
225
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
226 if (!get_data (s, &header[header_len], packet_len)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
227 printf ("header data read failed\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
228 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
229 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
230
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
231 header_len += packet_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
232
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
233 if ( (header[header_len-1] == 1) && (header[header_len-2]==1)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
234
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
235
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
236 if( streaming_bufferize( streaming_ctrl, header, header_len )<0 ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
237 return -1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
238 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
239
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
240 // printf ("get header packet finished\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
241
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
242 return (header_len);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
243
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
244 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
245
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
246 } else {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
247
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
248 int32_t packet_len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
249 int command;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
250 char data[BUF_SIZE];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
251
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
252 if (!get_data (s, (char*)&packet_len, 4)) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
253 printf ("packet_len read failed\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
254 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
255 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
256
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
257 packet_len = get_32 ((unsigned char*)&packet_len, 0) + 4;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
258
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
259 // printf ("command packet detected, len=%d\n", packet_len);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
260
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
261 if (!get_data (s, data, packet_len)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
262 printf ("command data read failed\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
263 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
264 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
265
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
266 command = get_32 (data, 24) & 0xFFFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
267
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
268 // printf ("command: %02x\n", command);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
269
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
270 if (command == 0x1b)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
271 send_command (s, 0x1b, 0, 0, 0, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
272
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
273 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
274
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
275 // printf ("get header packet succ\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
276 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
277 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
278
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
279 static int interp_header (uint8_t *header, int header_len)
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
280 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
281 int i;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7309
diff changeset
282 int packet_length=-1;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
283
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
284 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
285 * parse header
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
286 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
287
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
288 i = 30;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
289 while (i<header_len) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
290
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
291 uint64_t guid_1, guid_2, length;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
292
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
293 guid_2 = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
294 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
295 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
296 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
297 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
298
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
299 guid_1 = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
300 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
301 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
302 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
303 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
304
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
305 // printf ("guid found: %016llx%016llx\n", guid_1, guid_2);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
306
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
307 length = (uint64_t)header[i] | ((uint64_t)header[i+1]<<8)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
308 | ((uint64_t)header[i+2]<<16) | ((uint64_t)header[i+3]<<24)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
309 | ((uint64_t)header[i+4]<<32) | ((uint64_t)header[i+5]<<40)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
310 | ((uint64_t)header[i+6]<<48) | ((uint64_t)header[i+7]<<56);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
311
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
312 i += 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
313
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
314 if ( (guid_1 == 0x6cce6200aa00d9a6) && (guid_2 == 0x11cf668e75b22630) ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
315 printf ("header object\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
316 } else if ((guid_1 == 0x6cce6200aa00d9a6) && (guid_2 == 0x11cf668e75b22636)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
317 printf ("data object\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
318 } else if ((guid_1 == 0x6553200cc000e48e) && (guid_2 == 0x11cfa9478cabdca1)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
319
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
320 packet_length = get_32(header, i+92-24);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
321
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
322 printf ("file object, packet length = %d (%d)\n",
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
323 packet_length, get_32(header, i+96-24));
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
324
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
325
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
326 } else if ((guid_1 == 0x6553200cc000e68e) && (guid_2 == 0x11cfa9b7b7dc0791)) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
327
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
328 int stream_id = header[i+48] | header[i+49] << 8;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
329
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
330 printf ("stream object, stream id: %d\n", stream_id);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
331
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
332 stream_ids[num_stream_ids] = stream_id;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
333 num_stream_ids++;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
334
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
335 } else {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
336 printf ("unknown object\n");
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
337 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
338
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
339 // printf ("length : %lld\n", length);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
340
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
341 i += length-24;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
342
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
343 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
344
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
345 return packet_length;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
346
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
347 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
348
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
349
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
350 static int get_media_packet (int s, int padding, streaming_ctrl_t *stream_ctrl) {
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
351 unsigned char pre_header[8];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
352 char data[BUF_SIZE];
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
353
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
354 if (!get_data (s, pre_header, 8)) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
355 printf ("pre-header read failed\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
356 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
357 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
358
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
359 // for (i=0; i<8; i++)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
360 // printf ("pre_header[%d] = %02x (%d)\n",
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
361 // i, pre_header[i], pre_header[i]);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
362
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
363 if (pre_header[4] == 0x04) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
364
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
365 int packet_len;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
366
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
367 packet_len = (pre_header[7] << 8 | pre_header[6]) - 8;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
368
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
369 // printf ("asf media packet detected, len=%d\n", packet_len);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
370
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
371 if (!get_data (s, data, packet_len)) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
372 printf ("media data read failed\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
373 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
374 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
375
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
376 streaming_bufferize(stream_ctrl, data, padding);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
377
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
378 } else {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
379
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
380 int32_t packet_len;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
381 int command;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
382
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
383 if (!get_data (s, (char*)&packet_len, 4)) {
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
384 printf ("packet_len read failed\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
385 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
386 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
387
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
388 packet_len = get_32 ((unsigned char*)&packet_len, 0) + 4;
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
389
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
390 if (!get_data (s, data, packet_len)) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
391 printf ("command data read failed\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
392 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
393 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
394
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
395 if ( (pre_header[7] != 0xb0) || (pre_header[6] != 0x0b)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
396 || (pre_header[5] != 0xfa) || (pre_header[4] != 0xce) ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
397
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
398 printf ("missing signature\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
399 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
400 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
401
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
402 command = get_32 (data, 24) & 0xFFFF;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
403
7977
0c660f21e0e4 debug printf
arpi
parents: 7953
diff changeset
404 // printf ("\ncommand packet detected, len=%d cmd=0x%X\n", packet_len, command);
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
405
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
406 if (command == 0x1b)
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
407 send_command (s, 0x1b, 0, 0, 0, data);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
408 else if (command == 0x1e) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
409 printf ("everything done. Thank you for downloading a media file containing proprietary and patentend technology.\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
410 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
411 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
412 else if (command == 0x21 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
413 // Looks like it's new in WMS9
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
414 // Unknown command, but ignoring it seems to work.
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
415 return 0;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
416 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
417 else if (command != 0x05) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
418 printf ("unknown command %02x\n", command);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
419 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
420 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
421 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
422
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
423 // printf ("get media packet succ\n");
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
424
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
425 return 1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
426 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
427
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
428
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
429 static int packet_length1;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
430
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
431 int
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
432 asf_mmst_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *stream_ctrl )
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
433 {
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
434 int len;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
435
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
436 while( stream_ctrl->buffer_size==0 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
437 // buffer is empty - fill it!
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
438 int ret = get_media_packet( fd, packet_length1, stream_ctrl);
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
439 if( ret<0 ) {
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
440 printf("get_media_packet error : %s\n",strerror(errno));
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
441 return -1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
442 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
443 }
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
444
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
445 len = stream_ctrl->buffer_size-stream_ctrl->buffer_pos;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
446 if(len>size) len=size;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
447 memcpy( buffer, (stream_ctrl->buffer)+(stream_ctrl->buffer_pos), len );
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
448 stream_ctrl->buffer_pos += len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
449 if( stream_ctrl->buffer_pos>=stream_ctrl->buffer_size ) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
450 free( stream_ctrl->buffer );
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
451 stream_ctrl->buffer = NULL;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
452 stream_ctrl->buffer_size = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
453 stream_ctrl->buffer_pos = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
454 }
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
455 return len;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
456
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
457 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
458
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
459 int
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
460 asf_mmst_streaming_seek( int fd, off_t pos, streaming_ctrl_t *streaming_ctrl )
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
461 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
462 return -1;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
463 // Shut up gcc warning
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
464 fd++;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
465 pos++;
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
466 streaming_ctrl=NULL;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
467 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
468
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
469 int asf_mmst_streaming_start(stream_t *stream)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
470 {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
471 char str[1024];
10183
2ffb9a8b0428 10l found by yepyep
alex
parents: 7977
diff changeset
472 char data[BUF_SIZE];
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
473 uint8_t asf_header[8192];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
474 int asf_header_len;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
475 int len, i, packet_length;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
476 char *path;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
477 URL_t *url1 = stream->streaming_ctrl->url;
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7880
diff changeset
478 int s = stream->fd;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
479
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
480 if( s>0 ) {
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10206
diff changeset
481 closesocket( stream->fd );
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
482 stream->fd = -1;
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
483 }
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
484
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
485 /* parse url */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
486 path = strchr(url1->file,'/') + 1;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
487
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
488 url1->port=1755;
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10281
diff changeset
489 s = connect2Server( url1->hostname, url1->port, 1);
7250
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
490 if( s<0 ) {
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
491 return s;
27a1315d6af4 Checked if the connection succeeded before writing in the socket.
bertrand
parents: 6092
diff changeset
492 }
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
493 printf ("connected\n");
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
494
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
495 seq_num=0;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
496
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
497 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
498 * Send the initial connect info including player version no. Client GUID (random) and the host address being connected to.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
499 * This command is sent at the very start of protocol initiation. It sends local information to the serve
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
500 * cmd 1 0x01
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
501 * */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
502
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
503 /* prepare for the url encoding conversion */
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
504 string_utf16_open();
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
505
10183
2ffb9a8b0428 10l found by yepyep
alex
parents: 7977
diff changeset
506 snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
507 string_utf16 (data, str, strlen(str));
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
508 // send_command(s, commandno ....)
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
509 send_command (s, 1, 0, 0x0004000b, strlen(str)*2+2, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
510
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
511 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
512
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
513 /*This sends details of the local machine IP address to a Funnel system at the server.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
514 * Also, the TCP or UDP transport selection is sent.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
515 *
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
516 * here 192.168.0.1 is local ip address TCP/UDP states the tronsport we r using
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
517 * and 1037 is the local TCP or UDP socket number
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
518 * cmd 2 0x02
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
519 * */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
520
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
521 string_utf16 (&data[8], "\002\000\\\\192.168.0.1\\TCP\\1037", 24);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
522 memset (data, 0, 8);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
523 send_command (s, 2, 0, 0, 24*2+10, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
524
10206
35e306346e59 Using recv/send instead read/write for proper MinGW support (it's a 4.2BSD standard). Patch by FloDt <flodt8@yahoo.de>
alex
parents: 10183
diff changeset
525 len = recv (s, data, BUF_SIZE, 0) ;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
526
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
527 /* This command sends file path (at server) and file name request to the server.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
528 * 0x5 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
529
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
530 string_utf16 (&data[8], path, strlen(path));
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
531 memset (data, 0, 8);
11225
48bb1fd37d2a Fixing tons of 10ls. Patch by rgselk <rgselknospam@yahoo.com>
alex
parents: 10625
diff changeset
532 send_command (s, 5, 0, 0, strlen(path)*2+10, data);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
533
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
534 get_answer (s);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
535
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
536 /* The ASF header chunk request. Includes ?session' variable for pre header value.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
537 * After this command is sent,
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
538 * the server replies with 0x11 command and then the header chunk with header data follows.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
539 * 0x15 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
540
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
541 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
542 data[32] = 2;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
543
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
544 send_command (s, 0x15, 1, 0, 40, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
545
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
546 num_stream_ids = 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
547 /* get_headers(s, asf_header); */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
548
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
549 asf_header_len = get_header (s, asf_header, stream->streaming_ctrl);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
550 // printf("---------------------------------- asf_header %d\n",asf_header);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
551 packet_length = interp_header (asf_header, asf_header_len);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
552
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
553
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
554 /*
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
555 * This command is the media stream MBR selector. Switches are always 6 bytes in length.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
556 * After all switch elements, data ends with bytes [00 00] 00 20 ac 40 [02].
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
557 * Where:
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
558 * [00 00] shows 0x61 0x00 (on the first 33 sent) or 0xff 0xff for ASF files, and with no ending data for WMV files.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
559 * It is not yet understood what all this means.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
560 * And the last [02] byte is probably the header ?session' value.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
561 *
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
562 * 0x33 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
563
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
564 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
565
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
566 for (i=1; i<num_stream_ids; i++) {
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
567 data [ (i-1) * 6 + 2 ] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
568 data [ (i-1) * 6 + 3 ] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
569 data [ (i-1) * 6 + 4 ] = stream_ids[i];
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
570 data [ (i-1) * 6 + 5 ] = 0x00;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
571 }
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
572
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
573 send_command (s, 0x33, num_stream_ids, 0xFFFF | stream_ids[0] << 16, (num_stream_ids-1)*6+2 , data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
574
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
575 get_answer (s);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
576
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
577 /* Start sending file from packet xx.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
578 * This command is also used for resume downloads or requesting a lost packet.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
579 * Also used for seeking by sending a play point value which seeks to the media time point.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
580 * Includes ?session' value in pre header and the maximum media stream time.
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
581 * 0x07 */
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
582
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
583 memset (data, 0, 40);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
584
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
585 for (i=8; i<16; i++)
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
586 data[i] = 0xFF;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
587
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
588 data[20] = 0x04;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
589
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
590 send_command (s, 0x07, 1, 0xFFFF | stream_ids[0] << 16, 24, data);
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
591
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
592 stream->fd = s;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
593 stream->streaming_ctrl->streaming_read = asf_mmst_streaming_read;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
594 stream->streaming_ctrl->streaming_seek = asf_mmst_streaming_seek;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
595 stream->streaming_ctrl->buffering = 1;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
596 stream->streaming_ctrl->status = streaming_playing_e;
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
597
7880
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
598 packet_length1 = packet_length;
5bb4d8801a2c - fixed several 10l bugs
arpi
parents: 7472
diff changeset
599 printf("mmst packet_length = %d\n",packet_length);
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
600
11350
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
601 string_utf16_close();
007ec48cf146 Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
attila
parents: 11226
diff changeset
602
6092
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
603 return 0;
1529f01e8108 Added support for asf mmst protocol.
bertrand
parents:
diff changeset
604 }