On Thu, Nov 25, 2010 at 6:48 PM, Pid <p...@pidster.com> wrote:
> On 25/11/2010 17:49, declan harrison wrote:
>>> > So far you've shown me that you wrap the output stream, and how the
>>> > write method works.
>>> >
>>> > You haven't actually posted the part of the code where you write your
>>> > bit of the data to the wrapped output stream.
>>> >
>>> >
>>> > p
>> I just call wrapper.write(buf, 0, bug.lenght).  Are you looking more
>> source code here?
>
> You are reporting a problem with the response.
>
> You are writing to the output stream, and maybe setting headers on the
> response object.
>
> If you can post each bit of code that interacts with the response object
> we can stop guessing what's wrong and start trying to resolve it.
>
>
> p
>
Apologises about not posting enough of the code, see below for the
methods that sets the respos headers etc

In the method writeResponseHdrs (shown below)  we end up reject the
request as bit rate too low and end up executing this code

                            Log.AdaptVideoError("Video bitrate 
["+inputBitRate+"] is
not within range", "Will not encode this video.");
                            throw new InitialisationException("Video bitrate
["+inputBitRate+"] is not within range. Will not encode this video");

This exception is caught higher up the stack in doPost method which we
then set the status with the following

                        bufInStream = new 
AcceleratorInputStream(request.getInputStream(), 20480);
                        bufInStream.setHeaderRead();
                        bufOutStream = new 
AcceleratorOutputStream(response.getOutputStream(),20480);
                        try {
                                converter = createVideoAdapter(request, 
response,
                                                bufInStream,bufOutStream,
                                                request.getContentType(), true,
                                                qualityPolicy);
                        } catch (Exception ex) {
                                // caught the exception ok, make sure we have 
commited the response
                                
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
   ====== status code set here and sent in do Post
                                return;
                        }


So this is the request that I terminate on the client end before the
respone is actually sent by Tomcat, Im not exactly sure were in Tomcat
the code is when I terminate client request. If I terminate at the
correct point then the next request that re-uses that thread is wrong.

    /**
     * Write the initial response to the client.
     *
     * Must write headers before ressponse is committed.
     * @throws InitialisationException
     * @throws IOException
     *
     */
    private void writeResponseHdrs() throws InitialisationException,
IOException {
        //
        // Lets iterate thru the hdrs in the response and
        if (responseSet == false) {
            setResponseHeaders();
            // lets set flag to indicate that hdr have been set
            responseSet  = true;
            //inputStream.setHeaderRead();
            outputStream.setHeaderWritten();

            // set the status code as well
            //
            //
                        if (validateVideoBitate(inputBitRate) == false ) {
                            //Bitrate check failed - return duration to VR to 
facilitate JIT
                
                            if (writeResponseHdrs == true) {
                                streamDuration = mIContainer.getDuration();
                                response.setContentType( mimeType );
                
                                if (metaDuration > 0.0d) {
                                    response.addHeader("x-duration",
String.valueOf(metaDuration));
                                    Log.AdaptVideo("Adding video duration 
header on
BR failure [x-duration: "+
                                            String.valueOf(metaDuration)+"]
extracted from onMetaDataTag.");
                                } else {
                                    // in microseconds
                                    response.addHeader("x-duration",
String.valueOf(streamDuration/1000000));
                                    Log.AdaptVideo("Adding video duration 
header on
BR failure [x-duration: "+
                
String.valueOf(streamDuration/1000000)+"] extracted from container
API.");
                                }
                
                                outputStream.setHeaderWritten();
                            }
                
                            Log.AdaptVideoError("Video bitrate 
["+inputBitRate+"] is
not within range", "Will not encode this video.");
                            throw new InitialisationException("Video bitrate
["+inputBitRate+"] is not within range. Will not encode this video");
                        }
        }
    }

    private void setResponseHeaders() throws InitialisationException {
        Log.AdaptVideoInfo("Adding Http Response headers to help caller");
        response.setContentType( mimeType );
        // add the following headers for caller
        //  so that they know what we plan to do
        // with the output

        // this after initial work
        String origLen = request.getHeader("Content-Length");
        if (origLen != null) {
            response.addHeader("x-orig-content-length", origLen);
            Log.AdaptVideo("sending the original length hdr
x-orig-content-length: "+origLen);
        } else {
            Log.AdaptVideo("Content-Length hdr not present in the request");
        }

        // add session to manage state for caller e.g. RBA etc
        response.addHeader(SESSION_ID, videoSession.key());
        Log.AdaptVideo("have added hdr - "+ SESSION_ID +":
"+videoSession.key());

        if (metaDuration > 0.0d) {
            response.addHeader("x-duration", String.valueOf(metaDuration));
            Log.AdaptVideo("video duration header [x-duration: "+
                    String.valueOf(metaDuration)+"] extracted from
onMetaDataTag.");
        } else {
            // in microseconds
            response.addHeader("x-duration",
String.valueOf(streamDuration/1000000));
            Log.AdaptVideo("video duration header [x-duration: "+
                    String.valueOf(streamDuration/1000000)+"]
extracted from container API.");
        }

        response.addHeader("x-in-video-codec",getCodecString(mInVideoCodecId));
        response.addHeader("x-in-video-fps", String.valueOf(inFrameRate));
        response.addHeader("x-in-video-bitrate",
String.valueOf(mInVideoBitRate));
        response.addHeader("x-in-audio-codec", getCodecString(mInAudioCodecId));
        response.addHeader("x-in-audio-bitrate", String.valueOf(mInAudioBRate));
        response.addHeader("x-in-audio-asr", String.valueOf(mInSampleRate));
        response.addHeader("x--in-audio-channels",
String.valueOf(mInNumChannels));
    }
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to