[soc]: r5874 - in mms: mms.h mmst.c
Author: spyfeng Date: Wed Jul 28 17:09:11 2010 New Revision: 5874 Log: leave the common fileds between MMSHContext and MMSContext. add MMSTContext in mmst.c which use MMSContext. Modified: mms/mms.h mms/mmst.c Modified: mms/mms.h ============================================================================== --- mms/mms.h Tue Jul 27 18:28:44 2010 (r5873) +++ mms/mms.h Wed Jul 28 17:09:11 2010 (r5874) @@ -28,10 +28,6 @@ typedef struct { }MMSStream; typedef struct { - int outgoing_packet_seq; ///< Outgoing packet sequence number. - char path[256]; ///< Path of the resource being asked for. - char host[128]; ///< Host of the resources. - URLContext *mms_hd; ///< TCP connection handle MMSStream streams[MAX_STREAMS]; @@ -48,12 +44,6 @@ typedef struct { int remaining_in_len; ///< Reading length from incoming buffer. /*@}*/ - int incoming_packet_seq; ///< Incoming packet sequence number. - int incoming_flags; ///< Incoming packet flags. - - int packet_id; ///< Identifier for packets in the current stream. - unsigned int header_packet_id; ///< default is 2. - /** Internal handling of the ASF header */ /*@{*/ uint8_t *asf_header; ///< Stored ASF header. @@ -64,7 +54,6 @@ typedef struct { /*@}*/ int stream_num; ///< stream numbers. - int is_playing; } MMSContext; typedef struct Modified: mms/mmst.c ============================================================================== --- mms/mmst.c Tue Jul 27 18:28:44 2010 (r5873) +++ mms/mmst.c Wed Jul 28 17:09:11 2010 (r5874) @@ -37,6 +37,20 @@ #define LOCAL_ADDRESS 0xc0a80081 // FIXME get and use correct local ip address. #define LOCAL_PORT 1037 // as above. + +typedef struct { + MMSContext *ff_ctx; + int outgoing_packet_seq; ///< Outgoing packet sequence number. + char path[256]; ///< Path of the resource being asked for. + char host[128]; ///< Host of the resources. + int incoming_packet_seq; ///< Incoming packet sequence number. + int incoming_flags; ///< Incoming packet flags. + int packet_id; ///< Identifier for packets in the current stream. + unsigned int header_packet_id; ///< default is 2. + int is_playing; +} MMSTContext; + + /** Client to server packet types. */ typedef enum { CS_PKT_INITIAL = 0x01, @@ -84,8 +98,9 @@ typedef enum { } MMSSCPacketType; /** Create MMST command packet header */ -static void start_command_packet(MMSContext *mms, MMSCSPacketType packet_type) +static void start_command_packet(MMSTContext *mmst_ctx, MMSCSPacketType packet_type) { + MMSContext *mms = mmst_ctx->ff_ctx; mms->write_out_ptr = mms->out_buffer; bytestream_put_le32(&mms->write_out_ptr, 1); // start sequence @@ -93,7 +108,7 @@ static void start_command_packet(MMSCont bytestream_put_le32(&mms->write_out_ptr, 0); // Length starts from after the protocol type bytes bytestream_put_le32(&mms->write_out_ptr, MKTAG('M','M','S',' ')); bytestream_put_le32(&mms->write_out_ptr, 0); - bytestream_put_le32(&mms->write_out_ptr, mms->outgoing_packet_seq++); + bytestream_put_le32(&mms->write_out_ptr, mmst_ctx->outgoing_packet_seq++); bytestream_put_le64(&mms->write_out_ptr, 0); // timestamp bytestream_put_le32(&mms->write_out_ptr, 0); bytestream_put_le16(&mms->write_out_ptr, packet_type); @@ -101,16 +116,18 @@ static void start_command_packet(MMSCont } /** Add prefixes to MMST command packet. */ -static void insert_command_prefixes(MMSContext *mms, +static void insert_command_prefixes(MMSTContext *mmst_ctx, uint32_t prefix1, uint32_t prefix2) { + MMSContext *mms = mmst_ctx->ff_ctx; bytestream_put_le32(&mms->write_out_ptr, prefix1); // first prefix bytestream_put_le32(&mms->write_out_ptr, prefix2); // second prefix } /** Send a prepared MMST command packet. */ -static int send_command_packet(MMSContext *mms) +static int send_command_packet(MMSTContext *mmst_ctx) { + MMSContext *mms = mmst_ctx->ff_ctx; int len= mms->write_out_ptr - mms->out_buffer; int exact_length = (len + 7) & ~7; int first_length= exact_length - 16; @@ -137,8 +154,9 @@ static int send_command_packet(MMSContex return 0; } -static void mms_put_utf16(MMSContext *mms, uint8_t *src) +static void mms_put_utf16(MMSTContext *mmst_ctx, uint8_t *src) { + MMSContext *mms = mmst_ctx->ff_ctx; ByteIOContext bic; int size = mms->write_out_ptr - mms->out_buffer; int len; @@ -149,19 +167,20 @@ static void mms_put_utf16(MMSContext *mm mms->write_out_ptr += len; } -static int send_time_test_data(MMSContext *mms) +static int send_time_test_data(MMSTContext *mmst_ctx) { - start_command_packet(mms, CS_PKT_TIMING_DATA_REQUEST); - insert_command_prefixes(mms, 0xf0f0f0f1, 0x0004000b); - return send_command_packet(mms); + start_command_packet(mmst_ctx, CS_PKT_TIMING_DATA_REQUEST); + insert_command_prefixes(mmst_ctx, 0xf0f0f0f1, 0x0004000b); + return send_command_packet(mmst_ctx); } -static int send_protocol_select(MMSContext *mms) +static int send_protocol_select(MMSTContext *mmst_ctx) { char data_string[256]; + MMSContext *mms = mmst_ctx->ff_ctx; - start_command_packet(mms, CS_PKT_PROTOCOL_SELECT); - insert_command_prefixes(mms, 0, 0xffffffff); + start_command_packet(mmst_ctx, CS_PKT_PROTOCOL_SELECT); + insert_command_prefixes(mmst_ctx, 0, 0xffffffff); bytestream_put_le32(&mms->write_out_ptr, 0); // maxFunnelBytes bytestream_put_le32(&mms->write_out_ptr, 0x00989680); // maxbitRate bytestream_put_le32(&mms->write_out_ptr, 2); // funnelMode @@ -173,42 +192,46 @@ static int send_protocol_select(MMSConte "TCP", // or UDP LOCAL_PORT); - mms_put_utf16(mms, data_string); - return send_command_packet(mms); + mms_put_utf16(mmst_ctx, data_string); + return send_command_packet(mmst_ctx); } -static int send_media_file_request(MMSContext *mms) +static int send_media_file_request(MMSTContext *mmst_ctx) { - start_command_packet(mms, CS_PKT_MEDIA_FILE_REQUEST); - insert_command_prefixes(mms, 1, 0xffffffff); + MMSContext *mms = mmst_ctx->ff_ctx; + + start_command_packet(mmst_ctx, CS_PKT_MEDIA_FILE_REQUEST); + insert_command_prefixes(mmst_ctx, 1, 0xffffffff); bytestream_put_le32(&mms->write_out_ptr, 0); bytestream_put_le32(&mms->write_out_ptr, 0); - mms_put_utf16(mms, mms->path + 1); // +1 for skip "/" + mms_put_utf16(mmst_ctx, mmst_ctx->path + 1); // +1 for skip "/" - return send_command_packet(mms); + return send_command_packet(mmst_ctx); } -static void handle_packet_stream_changing_type(MMSContext *mms) +static void handle_packet_stream_changing_type(MMSTContext *mmst_ctx) { + MMSContext *mms = mmst_ctx->ff_ctx; dprintf(NULL, "Stream changing!\n"); // 40 is the packet header size, 7 is the prefix size. - mms->header_packet_id= AV_RL32(mms->in_buffer + 40 + 7); - dprintf(NULL, "Changed header prefix to 0x%x", mms->header_packet_id); + mmst_ctx->header_packet_id= AV_RL32(mms->in_buffer + 40 + 7); + dprintf(NULL, "Changed header prefix to 0x%x", mmst_ctx->header_packet_id); } -static int send_keepalive_packet(MMSContext *mms) +static int send_keepalive_packet(MMSTContext *mmst_ctx) { // respond to a keepalive with a keepalive... - start_command_packet(mms, CS_PKT_KEEPALIVE); - insert_command_prefixes(mms, 1, 0x100FFFF); - return send_command_packet(mms); + start_command_packet(mmst_ctx, CS_PKT_KEEPALIVE); + insert_command_prefixes(mmst_ctx, 1, 0x100FFFF); + return send_command_packet(mmst_ctx); } /** Pad media packets smaller than max_packet_size and/or adjust read position * after a seek. */ -static void pad_media_packet(MMSContext *mms) +static void pad_media_packet(MMSTContext *mmst_ctx) { + MMSContext *mms = mmst_ctx->ff_ctx; if(mms->remaining_in_len<mms->asf_packet_len) { int padding_size = mms->asf_packet_len - mms->remaining_in_len; memset(mms->in_buffer + mms->remaining_in_len, 0, padding_size); @@ -217,11 +240,11 @@ static void pad_media_packet(MMSContext } /** Read incoming MMST media, header or command packet. */ -static MMSSCPacketType get_tcp_server_response(MMSContext *mms) +static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst_ctx) { int read_result; MMSSCPacketType packet_type= -1; - + MMSContext *mms = mmst_ctx->ff_ctx; for(;;) { read_result = url_read_complete(mms->mms_hd, mms->in_buffer, 8); if (read_result != 8) { @@ -242,7 +265,7 @@ static MMSSCPacketType get_tcp_server_re if(AV_RL32(mms->in_buffer + 4)==0xb00bface) { int length_remaining, hr; - mms->incoming_flags= mms->in_buffer[3]; + mmst_ctx->incoming_flags= mms->in_buffer[3]; read_result= url_read_complete(mms->mms_hd, mms->in_buffer+8, 4); if(read_result != 4) { av_log(NULL, AV_LOG_ERROR, @@ -289,9 +312,9 @@ static MMSSCPacketType get_tcp_server_re // then fill up the buffer with the others tmp = AV_RL16(mms->in_buffer + 6); length_remaining = (tmp - 8) & 0xffff; - mms->incoming_packet_seq = AV_RL32(mms->in_buffer); + mmst_ctx->incoming_packet_seq = AV_RL32(mms->in_buffer); packet_id_type = mms->in_buffer[4]; - mms->incoming_flags = mms->in_buffer[5]; + mmst_ctx->incoming_flags = mms->in_buffer[5]; if (length_remaining < 0 || length_remaining > sizeof(mms->in_buffer) - 8) { @@ -313,7 +336,7 @@ static MMSSCPacketType get_tcp_server_re } // if we successfully read everything. - if(packet_id_type == mms->header_packet_id) { + if(packet_id_type == mmst_ctx->header_packet_id) { packet_type = SC_PKT_ASF_HEADER; // Store the asf header if(!mms->header_parsed) { @@ -329,9 +352,9 @@ static MMSSCPacketType get_tcp_server_re mms->asf_header_size += mms->remaining_in_len; } // 0x04 means asf header is sent in multiple packets. - if (mms->incoming_flags == 0x04) + if (mmst_ctx->incoming_flags == 0x04) continue; - } else if(packet_id_type == mms->packet_id) { + } else if(packet_id_type == mmst_ctx->packet_id) { packet_type = SC_PKT_ASF_MEDIA; } else { dprintf(NULL, "packet id type %d is old.", packet_id_type); @@ -341,31 +364,31 @@ static MMSSCPacketType get_tcp_server_re // preprocess some packet type if(packet_type == SC_PKT_KEEPALIVE) { - send_keepalive_packet(mms); + send_keepalive_packet(mmst_ctx); continue; } else if(packet_type == SC_PKT_STREAM_CHANGING) { - handle_packet_stream_changing_type(mms); + handle_packet_stream_changing_type(mmst_ctx); } else if(packet_type == SC_PKT_ASF_MEDIA) { - pad_media_packet(mms); + pad_media_packet(mmst_ctx); } return packet_type; } } -static int mms_safe_send_recv(MMSContext *mms, - int (*send_fun)(MMSContext *mms), +static int mms_safe_send_recv(MMSTContext *mmst_ctx, + int (*send_fun)(MMSTContext *mmst_ctx), const MMSSCPacketType expect_type) { MMSSCPacketType type; if(send_fun) { - int ret = send_fun(mms); + int ret = send_fun(mmst_ctx); if (ret < 0) { dprintf(NULL, "Send Packet error before expecting recv packet %d\n", expect_type); return ret; } } - if ((type = get_tcp_server_response(mms)) != expect_type) { + if ((type = get_tcp_server_response(mmst_ctx)) != expect_type) { av_log(NULL, AV_LOG_ERROR, "Corrupt stream (unexpected packet type 0x%x, expected 0x%x)\n", type, expect_type); @@ -375,10 +398,11 @@ static int mms_safe_send_recv(MMSContext } } -static int send_media_header_request(MMSContext *mms) +static int send_media_header_request(MMSTContext *mmst_ctx) { - start_command_packet(mms, CS_PKT_MEDIA_HEADER_REQUEST); - insert_command_prefixes(mms, 1, 0); + MMSContext *mms = mmst_ctx->ff_ctx; + start_command_packet(mmst_ctx, CS_PKT_MEDIA_HEADER_REQUEST); + insert_command_prefixes(mmst_ctx, 1, 0); bytestream_put_le32(&mms->write_out_ptr, 0); bytestream_put_le32(&mms->write_out_ptr, 0x00800000); bytestream_put_le32(&mms->write_out_ptr, 0xffffffff); @@ -392,11 +416,11 @@ static int send_media_header_request(MMS bytestream_put_le32(&mms->write_out_ptr, 2); bytestream_put_le32(&mms->write_out_ptr, 0); - return send_command_packet(mms); + return send_command_packet(mmst_ctx); } /** Send the initial handshake. */ -static int send_startup_packet(MMSContext *mms) +static int send_startup_packet(MMSTContext *mmst_ctx) { char data_string[256]; // SubscriberName is defined in MS specification linked below. @@ -405,17 +429,18 @@ static int send_startup_packet(MMSContex // download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-WMSP%5D.pdf snprintf(data_string, sizeof(data_string), "NSPlayer/7.0.0.1956; {%s}; Host: %s", - "7E667F5D-A661-495E-A512-F55686DDA178", mms->host); + "7E667F5D-A661-495E-A512-F55686DDA178", mmst_ctx->host); - start_command_packet(mms, CS_PKT_INITIAL); - insert_command_prefixes(mms, 0, 0x0004000b); - bytestream_put_le32(&mms->write_out_ptr, 0x0003001c); - mms_put_utf16(mms, data_string); - return send_command_packet(mms); + start_command_packet(mmst_ctx, CS_PKT_INITIAL); + insert_command_prefixes(mmst_ctx, 0, 0x0004000b); + bytestream_put_le32(&(mmst_ctx->ff_ctx->write_out_ptr), 0x0003001c); + mms_put_utf16(mmst_ctx, data_string); + return send_command_packet(mmst_ctx); } -static int asf_header_parser(MMSContext *mms) +static int asf_header_parser(MMSTContext *mmst_ctx) { + MMSContext *mms = mmst_ctx->ff_ctx; uint8_t *p = mms->asf_header; uint8_t *end; int flags, stream_id; @@ -476,24 +501,25 @@ static int asf_header_parser(MMSContext } /** Send MMST stream selection command based on the AVStream->discard values. */ -static int send_stream_selection_request(MMSContext *mms) +static int send_stream_selection_request(MMSTContext *mmst_ctx) { int i; - + MMSContext *mms = mmst_ctx->ff_ctx; // send the streams we want back... - start_command_packet(mms, CS_PKT_STREAM_ID_REQUEST); + start_command_packet(mmst_ctx, CS_PKT_STREAM_ID_REQUEST); bytestream_put_le32(&mms->write_out_ptr, mms->stream_num); // stream nums for(i= 0; i<mms->stream_num; i++) { bytestream_put_le16(&mms->write_out_ptr, 0xffff); // flags bytestream_put_le16(&mms->write_out_ptr, mms->streams[i].id); // stream id bytestream_put_le16(&mms->write_out_ptr, 0); // selection } - return send_command_packet(mms); + return send_command_packet(mmst_ctx); } -static int read_data(MMSContext *mms, uint8_t *buf, const int buf_size) +static int read_data(MMSTContext *mmst_ctx, uint8_t *buf, const int buf_size) { int read_size; + MMSContext *mms = mmst_ctx->ff_ctx; read_size = FFMIN(buf_size, mms->remaining_in_len); memcpy(buf, mms->read_in_ptr, read_size); mms->remaining_in_len -= read_size; @@ -502,13 +528,13 @@ static int read_data(MMSContext *mms, ui } /** Read at most one media packet (or a whole header). */ -static int read_mms_packet(MMSContext *mms, uint8_t *buf, int buf_size) +static int read_mms_packet(MMSTContext *mmst_ctx, uint8_t *buf, int buf_size) { int result = 0; int size_to_copy; - + MMSContext *mms = mmst_ctx->ff_ctx; do { - if(mms->asf_header_read_size < mms->asf_header_size && !mms->is_playing) { + if(mms->asf_header_read_size < mms->asf_header_size && !mmst_ctx->is_playing) { /* Read from ASF header buffer */ size_to_copy= FFMIN(buf_size, mms->asf_header_size - mms->asf_header_read_size); @@ -519,15 +545,15 @@ static int read_mms_packet(MMSContext *m size_to_copy, mms->asf_header_size - mms->asf_header_read_size); if (mms->asf_header_size == mms->asf_header_read_size) { av_freep(&mms->asf_header); - mms->is_playing = 1; + mmst_ctx->is_playing = 1; } } else if(mms->remaining_in_len) { /* Read remaining packet data to buffer. * the result can not be zero because remaining_in_len is positive.*/ - result = read_data(mms, buf, buf_size); + result = read_data(mmst_ctx, buf, buf_size); } else { /* Read from network */ - int err = mms_safe_send_recv(mms, NULL, SC_PKT_ASF_MEDIA); + int err = mms_safe_send_recv(mmst_ctx, NULL, SC_PKT_ASF_MEDIA); if (err == 0) { if(mms->remaining_in_len>mms->asf_packet_len) { av_log(NULL, AV_LOG_ERROR, @@ -536,7 +562,7 @@ static int read_mms_packet(MMSContext *m result= AVERROR_IO; } else { // copy the data to the packet buffer. - result = read_data(mms, buf, buf_size); + result = read_data(mmst_ctx, buf, buf_size); if (result == 0) { dprintf(NULL, "read asf media paket size is zero!\n"); break; @@ -551,26 +577,27 @@ static int read_mms_packet(MMSContext *m return result; } -static int send_close_packet(MMSContext *mms) +static int send_close_packet(MMSTContext *mmst_ctx) { - start_command_packet(mms, CS_PKT_STREAM_CLOSE); - insert_command_prefixes(mms, 1, 1); + start_command_packet(mmst_ctx, CS_PKT_STREAM_CLOSE); + insert_command_prefixes(mmst_ctx, 1, 1); - return send_command_packet(mms); + return send_command_packet(mmst_ctx); } /** Close the MMSH/MMST connection */ static int mms_close(URLContext *h) { - MMSContext *mms = (MMSContext *)h->priv_data; - + MMSTContext *mmst_ctx = (MMSTContext *)h->priv_data; + MMSContext *mms = mmst_ctx->ff_ctx; if(mms->mms_hd) { - send_close_packet(mms); + send_close_packet(mmst_ctx); url_close(mms->mms_hd); } /* free all separately allocated pointers in mms */ av_free(mms->asf_header); + av_free(mmst_ctx->ff_ctx); av_freep(&h->priv_data); return 0; @@ -578,52 +605,56 @@ static int mms_close(URLContext *h) static int mms_open(URLContext *h, const char *uri, int flags) { + MMSTContext *mmst_ctx; MMSContext *mms; int port, err; char tcpname[256]; h->is_streamed = 1; - mms = h->priv_data = av_mallocz(sizeof(MMSContext)); + mmst_ctx = h->priv_data = av_mallocz(sizeof(MMSTContext)); if (!h->priv_data) return AVERROR(ENOMEM); + mms = mmst_ctx->ff_ctx = av_mallocz(sizeof(MMSContext)); + if (!mmst_ctx->ff_ctx ) + return AVERROR(ENOMEM); // only for MMS over TCP, so set proto = NULL av_url_split(NULL, 0, NULL, 0, - mms->host, sizeof(mms->host), &port, mms->path, - sizeof(mms->path), uri); + mmst_ctx->host, sizeof(mmst_ctx->host), &port, mmst_ctx->path, + sizeof(mmst_ctx->path), uri); if(port<0) port = 1755; // defaut mms protocol port // establish tcp connection. - ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, mms->host, port, NULL); + ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, mmst_ctx->host, port, NULL); err = url_open(&mms->mms_hd, tcpname, URL_RDWR); if (err) goto fail; - mms->packet_id = 3; // default, initial value. - mms->header_packet_id = 2; // default, initial value. - err = mms_safe_send_recv(mms, send_startup_packet, SC_PKT_CLIENT_ACCEPTED); + mmst_ctx->packet_id = 3; // default, initial value. + mmst_ctx->header_packet_id = 2; // default, initial value. + err = mms_safe_send_recv(mmst_ctx, send_startup_packet, SC_PKT_CLIENT_ACCEPTED); if (err) goto fail; - err = mms_safe_send_recv(mms, send_time_test_data, SC_PKT_TIMING_TEST_REPLY); + err = mms_safe_send_recv(mmst_ctx, send_time_test_data, SC_PKT_TIMING_TEST_REPLY); if (err) goto fail; - err = mms_safe_send_recv(mms, send_protocol_select, SC_PKT_PROTOCOL_ACCEPTED); + err = mms_safe_send_recv(mmst_ctx, send_protocol_select, SC_PKT_PROTOCOL_ACCEPTED); if (err) goto fail; - err = mms_safe_send_recv(mms, send_media_file_request, SC_PKT_MEDIA_FILE_DETAILS); + err = mms_safe_send_recv(mmst_ctx, send_media_file_request, SC_PKT_MEDIA_FILE_DETAILS); if (err) goto fail; - err = mms_safe_send_recv(mms, send_media_header_request, SC_PKT_HEADER_REQUEST_ACCEPTED); + err = mms_safe_send_recv(mmst_ctx, send_media_header_request, SC_PKT_HEADER_REQUEST_ACCEPTED); if (err) goto fail; - err = mms_safe_send_recv(mms, NULL, SC_PKT_ASF_HEADER); + err = mms_safe_send_recv(mmst_ctx, NULL, SC_PKT_ASF_HEADER); if (err) goto fail; - if((mms->incoming_flags != 0X08) && (mms->incoming_flags != 0X0C)) + if((mmst_ctx->incoming_flags != 0X08) && (mmst_ctx->incoming_flags != 0X0C)) goto fail; - err = asf_header_parser(mms); + err = asf_header_parser(mmst_ctx); if (err) { dprintf(NULL, "asf header parsed failed!\n"); goto fail; @@ -641,10 +672,11 @@ fail: return err; } -static int send_media_packet_request(MMSContext *mms) +static int send_media_packet_request(MMSTContext *mmst_ctx) { - start_command_packet(mms, CS_PKT_START_FROM_PKT_ID); - insert_command_prefixes(mms, 1, 0x0001FFFF); + MMSContext *mms = mmst_ctx->ff_ctx; + start_command_packet(mmst_ctx, CS_PKT_START_FROM_PKT_ID); + insert_command_prefixes(mmst_ctx, 1, 0x0001FFFF); bytestream_put_le64(&mms->write_out_ptr, 0); // seek timestamp bytestream_put_le32(&mms->write_out_ptr, 0xffffffff); // unknown bytestream_put_le32(&mms->write_out_ptr, 0xffffffff); // packet offset @@ -653,14 +685,15 @@ static int send_media_packet_request(MMS bytestream_put_byte(&mms->write_out_ptr, 0xff); // max stream time limit bytestream_put_byte(&mms->write_out_ptr, 0x00); // stream time limit flag - mms->packet_id++; // new packet_id - bytestream_put_le32(&mms->write_out_ptr, mms->packet_id); - return send_command_packet(mms); + mmst_ctx->packet_id++; // new packet_id + bytestream_put_le32(&mms->write_out_ptr, mmst_ctx->packet_id); + return send_command_packet(mmst_ctx); } -static void clear_stream_buffers(MMSContext *mms) +static void clear_stream_buffers(MMSTContext *mmst_ctx) { + MMSContext *mms = mmst_ctx->ff_ctx; mms->remaining_in_len = 0; mms->read_in_ptr = mms->in_buffer; } @@ -669,25 +702,25 @@ static void clear_stream_buffers(MMSCont static int mms_read(URLContext *h, uint8_t *buf, int size) { /* TODO: see tcp.c:tcp_read() about a possible timeout scheme */ - MMSContext *mms = h->priv_data; + MMSTContext *mmst_ctx = h->priv_data; int result = 0; /* Since we read the header at open(), this shouldn't be possible */ - assert(mms->header_parsed); + assert(mmst_ctx->ff_ctx->header_parsed); - if (!mms->is_playing) { + if (!mmst_ctx->is_playing) { dprintf(NULL, "mms_read() before play().\n"); - clear_stream_buffers(mms); - result = mms_safe_send_recv(mms, send_stream_selection_request, SC_PKT_STREAM_ID_ACCEPTED); + clear_stream_buffers(mmst_ctx); + result = mms_safe_send_recv(mmst_ctx, send_stream_selection_request, SC_PKT_STREAM_ID_ACCEPTED); if (result) return result; // send media packet request - result = mms_safe_send_recv(mms, send_media_packet_request, SC_PKT_MEDIA_PKT_FOLLOWS); + result = mms_safe_send_recv(mmst_ctx, send_media_packet_request, SC_PKT_MEDIA_PKT_FOLLOWS); if (result) { return result; } } - return read_mms_packet(mms, buf, size); + return read_mms_packet(mmst_ctx, buf, size); } URLProtocol mmst_protocol = {
participants (1)
-
spyfeng