Closed Bug 42224 Opened 24 years ago Closed 22 years ago

server JPG push fails after several frames and displays broken image icon

Categories

(Core :: Networking: HTTP, defect, P2)

defect

Tracking

()

VERIFIED WONTFIX
mozilla1.0.1

People

(Reporter: pnunn, Assigned: darin.moz)

References

()

Details

(Keywords: crash, qawanted, Whiteboard: [Hixie-P5] [imagelib][needs r=/sr=][adt2 RTM])

Attachments

(7 files, 7 obsolete files)

12.09 KB, image/png
Details
46.10 KB, application/octet-stream
Details
1.64 KB, patch
Details | Diff | Splinter Review
36.86 KB, text/plain
Details
786 bytes, patch
Details | Diff | Splinter Review
347 bytes, text/plain
Details
1.69 KB, text/html
Details
bug#6074 was reopened with the following description.
Rather than mutate #6074, I'm opening this bug with the
current problem.

from Jonathan Walther <krooger@debian.org>:
<a href="http://216.100.231.10/">http://216.100.231.10</a> should be up
for a few months at least; when you access it it crashes Linux version 90% of
the time; on remaining platforms it either works fine, or works fine for a while
then displays only the alt tag.  If you get that far, pressing reload or
backward then forward also either crashes the browser or makes it display the
alt text in place of the image and hang.  This has been tested on Win2K, WinNT,
and Linux (Debian potato with kernel 2.2.14)
Hopefully this can be made to work soon?

----------------------------------------
from Peter Annema <disttsc@bart.nl>:
Linux, build ID 2000060908

To check what was going on, I loaded this URL:
mailto:krooger@debian.org

This works for a while, appending ##<number> to the URL, with number increasing.

It doesn't crash, but stops loading after a while and just displays the URL:
http://216.100.231.10:2230/xxx.jpg##11

(or ##6, or ##3)
Status: NEW → ASSIGNED
Notes to self:
monitor #40507. Both have similar symptoms.
-P
Target Milestone: --- → M17
The berkeley url is working, but the url,http://216.100.231.10/,
doesn't work. I'm replacing the url.
I get this on the output window:
###!!! ASSERTION: all buffered data should be gone: '!mBuffer', file d:\work\moz
illa\netwerk\streamconv\converters\nsMultiMixedConv.cpp, line 303
###!!! Break: at file d:\work\mozilla\netwerk\streamconv\converters\nsMultiMixed
Conv.cpp, line 303


This is the message in nsMultiMixedConv::~nsMultiMixedConv(). So I'm guessing
necko thinks the data stream has finished so it destroys the class. 

Jud, would you take a look at this? 
reassigning to put on your radar.
-p
Assignee: pnunn → valeski
Status: ASSIGNED → NEW
I guess something went wrong while copying my comment huh :-)

In the original comment, "mailto:krooger@debian.org" was 
"http://216.100.231.10:2230/xxx.jpg"

Anyway, for Windows 95 and Linux, both build ID 2000070908, it now doesn't seem 
to update at all, though it's in a "busy downloading" state. Either that, or it 
crashes loading that page.
QA Contact: elig → tpreston
Target Milestone: M17 → mozilla1.0
this should be fixed now. I can't hit the test url anymore.
Status: NEW → RESOLVED
Closed: 24 years ago
Resolution: --- → WORKSFORME
Updating URL and re-opening.   I'm seeing this with 2001041604
(with the http://dormcam.mine.nu:8080/index1.shtml , the ALT text is "Please Wait")
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---
Re-assigning
Assignee: valeski → pavlov
Status: REOPENED → NEW
OS: Windows NT → All
i only see the alt text for a short time when the 120 secs was up and it 
reloaded the cam.
I could be wrong here, but according to the server logs, you're using: 20010323
Is that right??
I'm seeing this bug with 2001041604
i'm running a debug build that i built yesterday.  dunno about the date its 
giving you.
I guess I was going by the identifier in the HTTPD logs:

"Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:0.8.1+) Gecko/20010323"
Keywords: qawanted
Sometimes I see only the ALT Text on that Page for 30sek.
If this happends I see the this in my console :

my_error_exit()
Not a JPEG file: starts with 0x43 0x6f
my_error_exit()
Not a JPEG file: starts with 0x00 0x6d
my_error_exit()
Not a JPEG file: starts with 0x00 0x6d
Yeah, I get something similar:

my_error_exit()
Not a JPEG file: starts with 0x43 0x6f
my_error_exit()
Not a JPEG file: starts with 0xd4 0x94
my_error_exit()
Not a JPEG file: starts with 0xd4 0x94
if you are getting that then libjpeg doesn't know what to do with the jpeg data 
it is being fed. .  are we sure that the jpeg it is making is a valid jpeg?  (on 
the frames that die?)
Wish I could tell you more...   All I know is that it works fine in Netscape 4.x

Maybe if it got a bad JPEG frame, it could skip over it and continue with the
next, rather then just stopping altogether?
i don't think that would be proper behavior.  there is no way for me to know 
that more data is coming.
Whiteboard: [imagelib]
hmm, don't think I can be of much help on this one, other than to tell you that 
I am still seeing this behavior on W2k build 2001042504, sorry :-(
Would it be possible to check how the NS4 architecture achieves JPEG push
without the problem Mozilla has?    Or is Moz just too different to be able to
apply the same technique?
Pavlov: For the frame where the image is broken, sure, we should display the
alt text. However if it's multipart/x-replaced content then when the next frame
comes in, if it is valid then we should go back to handling it. IMHO.
Whiteboard: [imagelib] → [Hixie-P5] [imagelib]
*** Bug 79404 has been marked as a duplicate of this bug. ***
*** Bug 79121 has been marked as a duplicate of this bug. ***
*** Bug 86157 has been marked as a duplicate of this bug. ***
*** Bug 85891 has been marked as a duplicate of this bug. ***
*** Bug 77168 has been marked as a duplicate of this bug. ***
http://8ball.federated.com is busted again (0.9.4)
*** Bug 103057 has been marked as a duplicate of this bug. ***
*** Bug 84860 has been marked as a duplicate of this bug. ***
From bug 103057

This URL is a live (instantaneous update) feed from a computer lab. The
administrator of the camera lives down the hall from me so if you need any info
I can get it.

http://webcam315.cede.psu.edu (From what I understand, it has a 2MBps threshold
appllied for one webcam. This means the update is as fast as your connection can
handle. :-) However, if there is a problem waiting for data or something like
that, the administrator has informed me that he can lift that restriction and
let the camera pump full duplex 10MBps data to the net. (Ahh the glories of
Internet2))

adding keywords since this is a crash. Upping severity as well.
Talkbacks (3 different systems):
TB36239560E
TB36242300W
TB36242635Q

if you want the pure data feed of the image, that is at:
http://webcam315.ecsel.psu.edu/axis-cgi/mjpg/video.cgi
Severity: normal → critical
*** Bug 104838 has been marked as a duplicate of this bug. ***
After browsing directly to a JPG Push feed, I noticed that the image dimensions
displayed are way off.   That couldn't be causing any of the trouble people are
seeing here, could it??
This may be a long shot, but could it have anything to do with bug 97683?  It
seems that somewhere along the line the http connection is corrupted (mozilla
losing track of it?)?
updating summary to reflect current behavior
Summary: server JPG push fails after several frames and displays alt text → server JPG push fails after several frames and displays broken image icon
*** Bug 111353 has been marked as a duplicate of this bug. ***
Depends on: 106166
nom'ing nsbeta1. this affects multipart mixed images ("server push") in general.
another site is http://8ball.federated.com (which still doesn't work in
mozilla0.9.8 build)
Keywords: nsbeta1
I think that bug 106166 should then also be nominated nsbeta1, as that one is
blocking this bug.
See also:
http://www.camarades.com
(possibly the most popular webcam software around)

In their FAQ:
Netscape 6 Preview Release 1 is a complete mess. We'll wait for a beta release
at least before we start patching the site up for this one.

(yes, it's a little out of date, but actually JPEG push support has regressed
since NS6PR1)
The imageframe is set as immutable hence when a SetImageData on the frame is 
called leads to return an NS_ERROR_FAILURE. 

Hence added a check in imgRequest to fetch the contenttype of the page to set
the frame as mutable if the content type is "multipart/x-mixed-replace".
Passing the mutability of the frame got from imgrequest  to decoders and
container through the Init method.

One of my observation was that we were setting the frame as immutable, in the
in the imageConatiner if num of frames is 1 and decoders.
Though I have set the frame as immutable by default, do we need to reset the
frame as immutable once the entire request is fulfilled in case of
multipart/x-mixed-replace request.

Other observation was that only the following decoders were setting the frame
as immutable 
a) nsBMPDecoder
b) nsJPEGDecoder
c) nsPNGDecoder
Was there any specific reason for it?
Keywords: nsbeta1+
Attachment #69221 - Attachment is obsolete: true
Comment on attachment 69221 [details] [diff] [review]
patch file for fixing the sever pushed images

I making this patch as obselete because, the patch breaks the build in the
extensions\inspector\base\src\inBitmapDecoder.cpp, as I did not 
change the Init in this class, as per the idl change I did in imgIDecoder.idl. 

I had done the changes only in the classes under modules\libpr0n. 
I am working on this and would upload the correct patch once I am 
done on it.
updated the patchFile to incorporate changes in inBitmapDecoder class as well.
The comments stand the same as mentioned in comment #38 by me.
OK, with this patch JPG push is working again which is great!   (This patch
seems to fix bug 106166 ?)
But the problem described in the summary is still there.

One way I can pretty regularly reproduce the problem is this:
(note:  It sometimes can be a little tricky to see if it's actually streaming,
but if you look closely, you will see the JPEG artifacts change with every frame)

1) Open a Netscape 4.x browser at http://dormcam.mine.nu:8080/moztest.html
2) Open a mozilla browser at the same URL
3) Notice the image in the Mozilla window is streaming.  Yay!  :)
4) Switch to the Netscape and watch for about 10 seconds while the video streams
5) Switch back to the Mozilla browser.  The image will be broken
6) Go back to the Netscape 4.x browser.   *Notice the image is still streaming*

Ok, I've just been playing around with the page:
http://www.santacruzwharf.com/camtides.html

The problem described immediately above are much more difficult to reproduce,
but it still does happen.   Just leave the page open for a while, do other
stuff, and eventually it will come up as broken.

I think that possibly Netscape 4.x is more "robust" in handling JPG push
compared to Mozilla, and I'm seeing the results of that.   The Santacruz site
seems to be quite fast and reliable.    Perhaps the
http://dormcam.mine.nu:8080/moztest.html stream is less reliable, since the PC
that runs it is quite slow.

The thing is 4.x seems to handle the slowness in stride, while Mozilla doesn't
quite fare as well.    Perhaps if a frame is corrupt (or too late?) somewhere
along the line, Mozilla just gives up, while Netscape will just chug along
displaying the frames following it.    Just a guess?

Thanks for your work in this bug, Nivedita.  Your efforts are greatly appreciated!
if you want a fast test page to ensure this works, you can use
http://webcam315.cede.psu.edu/

It runs off of an enormous University connection, and the administrator lives
next door to me. 

If this is an issue of the server sending slow data, we really should be able to
handle a network lag or a missed frame and just pick up at the next image header...
This patch fixes the document load so that leaving a page with a multipart
mixed channel doesn't cause the data to be downloaded forever.
Comment on attachment 69456 [details] [diff] [review]
updated patch file for fixing the sever pushed images 

Nivedita,  I would prefer to add a method to imgILoad to query if the load is
from a multipart mixed channel or not rather than by adding a new flag to
imgIDecoder::Init().  Imagelib itself shouldn't tell the decoders if the frame
is mutable.  That should be up to the decoder, but the decoder probably needs
to know if the data is from a multipart stream so that it can properly handle
the data.  The only decoder that should care currently is the JPEG decoder.
Attachment #69456 - Flags: needs-work+
Using imgILoad to indicate if the channel is a multipart mixed channel.
Comment on attachment 69629 [details] [diff] [review]
patch file incorporating comments given by Stuart

mChannel->GetContentType(&mContentType); copies the string.  You will need to
free it.  I suggest using a nsXPIDLCString... then you can do:
nsXPIDLCString ctype;
GetContentType(getter_Copies(ctype));

then you can strcasecmp ctype.get()
incorporated comments given by Stuart. Using nsXPIDLCString instead of char*.
Removing nsbeta1 nomination because this bug has been plussed.
Keywords: nsbeta1
Attachment #69456 - Attachment is obsolete: true
Attachment #69609 - Attachment is obsolete: true
Attachment #69629 - Attachment is obsolete: true
Attachment #69634 - Attachment is obsolete: true
Comments on the patch:
-    mChannel = do_QueryInterface(aRequest);
+    nsCOMPtr<nsIMultiPartChannel> mpchan(do_QueryInterface(aRequest));
+    if (mpchan)
+      mpchan->GetBaseChannel(getter_AddRefs(mChannel));
+    else
+      mChannel = do_QueryInterface(aRequest);

Be consistent about nsCOMPtr<nsIFoo> bar(do_QueryInterface(baz)) vs.
nsCOMPtr<nsIFoo> bar = do_QueryInterface(baz) to reduce brainprint.

+  if (mObservers.Count() == 0) {
+    this->Cancel(NS_IMAGELIB_ERROR_FAILURE);

Is there a reason for "this->" ?
huh?  mChannel is a member and you have to use =.  mpchan is a new nsCOMPtr and
is being initialized to do_QueryInterface(aRequest).

as for this->, there are too many different Cancels in the air in the code and
this-> makes me know which one it is without any confusion.
Uh, sorry about that; brain freeze. Yeah, this looks ok. r=sfraser
Comment on attachment 71432 [details] [diff] [review]
patch including both patches from this bug

sr=darin
Attachment #71432 - Flags: superreview+
Comment on attachment 71432 [details] [diff] [review]
patch including both patches from this bug

a=shaver for 0.9.9, and recording simon's review in the manager.
Attachment #71432 - Flags: review+
Attachment #71432 - Flags: approval+
fixed.  The patch in bug 106166 is still needed to keep the cams from not
stopping after a short time I believe.
Status: NEW → RESOLVED
Closed: 24 years ago23 years ago
Resolution: --- → FIXED
Target Milestone: mozilla1.0 → mozilla0.9.9
*** Bug 97683 has been marked as a duplicate of this bug. ***
The patch attached to this bug is actually the fix for bug 106166
The originally described bug is definately still present.   
Re: Comment #57 , the patch for bug 106166 makes no difference here.

The steps to reproduce in Comment #42 still apply.

Re-opening.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
If I follow the steps in comment #42 things work fine for me.  I've been 
watching it now for at least 5 minutes without it stopping.
I can still reproduce this with latest 0.9.9 branch build 2002030921
Note: In order to see the broken image icon, you must switch to another
application and then back to Mozilla again.   (To force a re-draw?)

Otherwise, the image will be stuck on the last frame received.
loaded http://dormcam.mine.nu:8080/moztest.html in background in a new tab
allowed it to load before looking
streaming was OK
then changed to first tab, and back to streaming: OK
changed back/forth once more: image was broken.

Unable to repro though - now it's been OK after 10 switches, but the streaming
stopped at some point. (Easyest to see if you study the "colors" in the ceiling)
Testing with day old CVS build, Linux.
giving to nivedita to investigate further
Assignee: pavlov → nivedita
Status: REOPENED → NEW
Target Milestone: mozilla0.9.9 → mozilla1.0
all the patches in this bug have been checked in and I can't reproduce the
problem that WD sees.
Note:

This bug is nearly impossible to reproduce with a debug build.   But an
optimized build of the same code will show it right away.   Some sort of timing
issue perhaps?

Anyway, with a debug build, every time the JPEG stream stops I see something
like this:
JPEG decoding error:
Not a JPEG file: starts with 0x43 0x6f
JPEG decoding error:
Not a JPEG file: starts with 0x73 0x82
JPEG decoding error:
Not a JPEG file: starts with 0x73 0x82
WARNING: Never finished decoding the JPEG., file
f:\mozilla_source\mozilla\modul
es\libpr0n\decoders\jpeg\nsJPEGDecoder.cpp, line 166
WARNING: Never finished decoding the JPEG., file
f:\mozilla_source\mozilla\modul
es\libpr0n\decoders\jpeg\nsJPEGDecoder.cpp, line 166


See also comment #12 and comment #13

The thing in common here is that it's *always* 0x43 0x6F that the JPEG decoder
is seeing instead of the SOI marker.
0x43 0x6F is the ASCII code for "Co"
(as in "Content-type: image/jpeg")
sorry for the spam but I also have JPEG stream stopping after some "time" using
build 2002031303 on Win2k from a generic Axis camera 2120.
I load the page with JPEG stream, then open another window or mail&news and,
after some "time", I get a broken icon instead of the video stream. I've been
trying to find some reproducible steps for days (since the patch was checked in)
but I cannot trigger the bug whenever I want, it just happen some time after
having loaded the stream.
sounds like a networking problem?
Thanks WD for the information, I am able to reproduce the problem indicated in 
the comment 42 using the optimized build. I'll try looking into what's causing 
this problem.
I think it is the netlib which stops pumping the jpeg to the imaglib after some
time. However I am not sure about it. I'll investigate further.
I have attached the trace log, where in you find closing of connection followed
by "unable to process transaction queue at this time". This is when I see
broken image on mozilla.
The attachment id=74076 is a .tar.gz file. I am able to consistently reproduce 
this with the optimized build. 
Comment on attachment 74076 [details]
trace of browser interaction 

This is a .tar.gz file
Attachment #74076 - Attachment mime type: text/plain → application/octet-stream
nivedita: the log file tells me that someone is returning NS_ERROR_FAILURE from
their OnDataAvailable implementation.... possibly the nsMultiPartMixed stream
converter... or possibly imglib.

the "unable to process transaction queue at this time" line is not an error or
even a warning... it simply says that there are no more pending HTTP transactions.
throwing some printf's into an optimized build, I was able to determine that
this is the line that's hit when the image breaks:

http://lxr.mozilla.org/seamonkey/source/netwerk/streamconv/converters/nsMultiMixedConv.cpp#801
I've attached the nsMultiMixedConv.cpp file that I've used for debugging with an
optimized build.    After further analysis, I've discovered that the JPEG stream
nearly always stops here:
http://lxr.mozilla.org/seamonkey/source/netwerk/streamconv/converters/nsMultiMixedConv.cpp#710

and sometimes here:
http://lxr.mozilla.org/seamonkey/source/netwerk/streamconv/converters/nsMultiMixedConv.cpp#816

In both of those cases, memory is attempted to be allocated.    

Finally, I'm not sure if bug 97683 should be blocking this bug or not.  It's
likely to be related.
There are 2 places where I saw problems:
1) In the PushOverLine method, there were cases where aLen was being set to a
negative value, where that would cause problems later on with Alloc()
2) The secion of code commented "//This was the last delimiter so we can stop
processing" was producing some false positives.  This would stop the stream
before it was really done.

This patch really seems like a band-aid, but in my testing it seemed to fix the
problem.  Could somebody who knows what they're doing take a look at it.   Even
if this isn't right, it should at least be a starting point.
With this patch, I see one remaining problem.
After streaming http://webcam315.cede.psu.edu/view/view.shtml for a while (10+
minutes usually) at some point in time the streaming will stop.
It is when NS_BINDING_ABORTED is returned at this line:
http://lxr.mozilla.org/seamonkey/source/netwerk/streamconv/converters/nsMultiMixedConv.cpp#835
Though I suspect PushOverline at "if (aPtr[1] == nsCRT::LF)" which increments 
chars, as I observed I entered this with aLen as 1 and zero as well, hence 
aLen -= chars; would yield a negative value, in this case, with chars being 
greater than aLen. 
Additionally , we are doing a lot of arithmetic with bufLen, which  is not 
protected against negatives values. 

But above these, I encounter the problem only with the given test case site. I 
tried testing it against http://engwear.org/1999/frosh/fungja/push.html and 
some other urls, I dont encounter broken image even after 10-20 mins, whereas 
in the test case url, if I just switch to other application withing minutes of 
loading the url and get back , I find broken image.

WD, can you please test against the 
url "http://engwear.org/1999/frosh/fungja/push.html " and confirm my 
observations. Can you please upload the cgi script which is used for the test 
case url. 
I have tested that URL, and it does stop after a while even with my patch. 
Where it goes bad is when BufferData is passed a negative second parameter. 
(The amount of memory to buffer).    I'm still trying to track down where this
value gets set negative.

As for the software used at http://dormcam.mine.nu:8080/moztest.html
It's truetech webcam, downloaded free from http://www.truetech.com
I was going to recommend going to http://www.camarades.com to see other cams
(100 or so maybe?) that use TrueTech software, but it seems that the site is
almost all pay-only cams now.
Here's the file I'm currently using for testing with an optimized build.
Attachment #74178 - Attachment is obsolete: true
(sorry for the spam, I don't want to submit a new bug report)
It might help you, I just crashed Mozilla watching a streaming video (Axis
Netcam), I don't know if it's related but I had a single window opened so I
believe it's related. Here's the Talkback ID using build 2002032003 on Win2k:
TB4303307Q.
I too have seen crashes occasionally during streaming.   It's only been with my
patch:
http://bugzilla.mozilla.org/attachment.cgi?id=74462&action=view
It's likely that the problem has always been present but without the patch, data
would never stream long enough to run into it.

I would get a crash like this, for example:
Instruction 0x0137144a referenced memory at 0x0537b000
The specified memory could not be "read"

The section of code where it would happen is:
nsMultiMixedConv::FindToken

Can somebody check if the Talkback ID TB4303307Q is the same kind of crash?
I have observed with the given testcase url the netscape communicator also 
stops after 10 minutes or so. When observed through etheral logs I found the 
server had stopped pumping data. And in mozilla as per http logs and etheral 
trace I see a EOF encountered, hence the streaming stops. I have a patch which  
would not stop streaming untill the "EOF" is encountered. I have not 
encountered any crash so far. Hence let me test the patch if streaming for 
longer duration causes a crash.

I tested the patch against the url  http://webcam315.cede.psu.edu/ were it 
streamed for more than 40 -50 mins before it encountered an EOF.

The comment 83  is made by Nivedita
I should have noted earlier, but the URL associated with the testcase should
pump out data for about 300 seconds or so.  At which time a reload is required
to start it up again.    The image should not be broken if switching to another
window and then back again.

I'm switching the URL for this bug to:
http://engwear.org/1999/frosh/fungja/push.html

Due to the extremely high push rate, that URL is more likely to exhibit any
anomolies in how Mozilla handles Multipart-Mixed / JPEG push data.
bug 103057 had several talkback reports of crashes involving the site at
http://webcam315.cede.psu.edu/

It would only happen after a while of viewing and reloading, and seemed to be
subdued when the first patch for this bug was checked in.
added a check in PushOverline for the aLen.
Whiteboard: [Hixie-P5] [imagelib] → [Hixie-P5] [imagelib][needs r=/sr=]
Whiteboard: [Hixie-P5] [imagelib][needs r=/sr=] → [Hixie-P5] [imagelib][needs r=/sr=][adt2]
Comment on attachment 71432 [details] [diff] [review]
patch including both patches from this bug

obsoleting patch which has landed.
Attachment #71432 - Attachment is obsolete: true
*** Bug 136403 has been marked as a duplicate of this bug. ***
behaviour is still present viewing an Axis 2100 webcam in rc1.
any chance we can get the most recent patch for this bug checked in?
Although still not perfect with it, that patch (03/25/02 03:05) makes it work
much better than it currently does.  (RC1 and latest trunk)
Reassigning owner. Previous owner is gone.
Assignee: nivedita → pavlov
Handing over to networking to deal with the current issues in the multimixedconv
code
Assignee: pavlov → darin
Component: ImageLib → Networking: HTTP
QA Contact: tpreston → tever
no time to look at this fixed for 1.0
Whiteboard: [Hixie-P5] [imagelib][needs r=/sr=][adt2] → [Hixie-P5] [imagelib][needs r=/sr=][adt2][RTM]
Target Milestone: mozilla1.0 → mozilla1.0.1
hmmm... so a packet trace reveals that the connection is terminated with a
server-side TCP/IP reset.  i assume nivedita's patch avoids crashing if the
reset occurs mid-chunk... which is probably very likely.

so what should we do if the connection fails due to the server dropping the
connection?  should we reload the URL?  or maybe we should just display the last
image?  or maybe showing a broken image icon is best.

/me tries nav4x
hmm.. nav4x doesn't seem to have any trouble with this site.
actually, i finally did get it to stale with 4x... and it continues to render
the last image... even if i temporarily cover up the browser window, etc.

netstat shows sockets in the CLOSE_WAIT state, indicating that the server closed
the connection.  now, i wonder why it took so long for the problem to appear in
nav4x.
Target Milestone: mozilla1.0.1 → ---
ok, i talked with pavlov, and the fact that we display the broken image icon
seems reasonable.  we just should ensure that mozilla doesn't crash when the
server terminates the connection.
Status: NEW → ASSIGNED
Priority: P3 → P2
Whiteboard: [Hixie-P5] [imagelib][needs r=/sr=][adt2][RTM] → [Hixie-P5] [imagelib][needs r=/sr=][adt2 RTM]
Target Milestone: --- → mozilla1.0.1
crash has been fixed... see bug 100595.  as for the broken image icon thing, i
spoke with pavlov and we agreed that to allow the broken image icon.  afterall,
that best indicates a server problem (which is what it means -- modulo some bugs
-- when the multipart stream dies).
marking FIXED
Status: ASSIGNED → RESOLVED
Closed: 23 years ago22 years ago
Resolution: --- → FIXED
whoops, i meant WONTFIX
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
_WONTFIX_
Status: REOPENED → RESOLVED
Closed: 22 years ago22 years ago
Resolution: --- → WONTFIX
Instead of showing a broken image why don't you have it reload the feed?

It will be apparent that the connection is droping and re-establishing via
server side logs, i don't see why the client would be interested in that
information.

Displaying the broken image icon may be correct, but its damn inconvient to
anyone trying to use jpeg push :)
*** Bug 167784 has been marked as a duplicate of this bug. ***
See duplicate 167784.
I intended to use mozilla to deploy on clients of our application.
Unfortunately, one page of our system points to a web server on a web cam that
generates a stream of jpeg.

After a while mozilla stops refreshing the images. It sometimes crashes (see the
talkback IDs in bug 167884) but this I am not 100% sure they are related.

IE and Opera work flawlessly. I will have to use a different browser for our
deployment as I cannot use a browser that stops refreshing on a screen without
person in front of it to refresh every 30 seconds. Too bad.
Verified, since bug 167784 is still open.
Status: RESOLVED → VERIFIED
QA Contact: tever → junruh
Seems that this bug (or something very like it) happens when trying to view the
"multipart/x-mixed-replace" stream produced by the webcam code built into
'motion' 3.x

Happens with Mozilla 1.2a and Phoenix 0.5.

Usual symptom is that the first image of the stream is displayed, but no more.
Hitting 'refresh' produces an updated still image first time it is pressed but
doesn't do anything the second or subsequent times.

However, the bug sometimes doesn't show. If the streaming ever manages to start
up correctly (maybe 20% of the time?) it will work quite happily for days.

I don't understand how something like this can be marked "verified, wontfix"
BTW. Such a statement is an oxymoron, surely?
Steven: the bug you're describing should be filed as a separate problem specific
to the "motion" camera.  thx!

WONTFIX means that we won't automatically restart a JPG push stream when the
server drops the connection.  but, in your case it sounds like there are likely
other problems.  does it work with netscape 4.x?
Darin:
So far the stream from 'motion' seems to work 100% with Netscape 4.76 (under
linux of course). Sorry for not pointing that out before.

Will Dormann emailed to suggest I try his patch (it's attached to this bug -
presumably that's the one dated 2002-03-25). However, I'd downloaded the
distribution binary, not the sources of the browser. If I get time, I'll grab
the sources and try. However the symptoms I see are not a broken image icon
after a few frames. I get a frozen picture after one or two frames.

I'll try and get a webcam up and visible to the world to aid diagnosis of this
problem. I am however working behind a firewall at the moment - will have to
find a machine outside or get a hole put in the firewall.
This is a trivial script that does server-push PNG using whatever files match
/usr/share/pixmaps/gnome-*.png.  To use it just run nc -l -p 43210 -e
serverpush.sh, then connect to http://localhost:43210/ in the browser.

Hope this helps as a testcase.
Attachment #109782 - Attachment mime type: application/octet-stream → text/plain
to Steven comment 107, see if your camera has a firmware upgrade. Mine an Axis
camera had, that solved the streaming problem. see bug 167784.
to Adam comment 110, I changed the mime/type of your attachment to text/plain
for better viewability in the browser.
Jerome: In comment #111 it would seem that you've got the wrong idea about the
camera. I'm not using a standalone webcam, I'm using a simple CCTV camera
plugged into a capture card on a linux box. Linux's 'video4linux' interfaces
provide images on demand to a program called 'motion'
(http://motion.technolust.cx) which, amongst many things, can provide a webcam
interface.
Since the mozilla people don't seem to give a damn about this problem i've
decided to share a little workaround for all of you, you can view it in action
(with mozilla, <GASP!>) at www.hellspark.com (click drive):

Put this in your html:
<script language="JavaScript">
function javatrick(vcar) {
   var time = new Date()
   second = time.getSeconds()
   vcar.src="http://www.hellspark.com/cgi-bin/outstill.pl?" +second
}
document.write('<img NAME="vcar"
src="http://www.hellspark.com/cgi-bin/outstill.pl" width="320" height="240"
onLoad="javatrick(this)">')
</script>

Have this in your cgi-bin:

#!/usr/bin/perl
# outstill.pl Copyright David Mcanulty (dave@hellspark.com) 1998
#
$| = 1;
use Time::HiRes qw(sleep);
$time_to_sleep = .25;   # 1second / .074074 (for 13.5 FPS)
if (-e "image") {
        open (PIC, "image");
        print "Content-type: image/jpeg\n\n";
        while (<PIC>) {
                print $_;
        }
        close (PIC);
} else {
        open (PIC, "down4repair.jpg");
        print "Content-type: image/jpeg\n\n";
        while (<PIC>) {
                print $_;
        }
        close (PIC);
        exit;
}
sleep($time_to_sleep);
exit;

The trick of course is to feed epoch time into the script so mozilla/ie/etc
can't cash the image, the url is always diffrent! :)
Although I'm not disputing that there is trouble with mozilla and certain webcam
software packages, I've been streaming the webcam from http://www.hellspark.com
for the past 45 minutes straight now, and it's still going fine.
I've noticed that some webcam packages (like motion) have a delay between
sending  the first head and the picture

ie:
HTTP/1.1 200 OK
Max-Age: 0
Expires: 0
Cache-Control: no-cache
Cache-Control: private
Pragma: no-cache
Content-type: multipart/x-mixed-replace;boundary=BoundaryString
******* (long wait [5secs+])
--BoundaryString
Content-type: image/jpeg
Content-Length: 88888

(picture data)


Could this affect how mozilla works and does not work.  I did hack motion so
that it used a thread to handle webcam connection so that there was no delay
there (ie connect, send header, send current picture, now wait until next one)
and it seemed to work a lot better.  Is there something in the header parser
that needs the next bit of data right away?
ashley: hmm... i don't think that sort of delay should matter as far as mozilla
is concerned.
This page presents a server push provided by a webcam.
When the server push fails on Mozilla,
the image vanishes and the "ALT" text is displayed instead.
A javascript onerror event handler is assigned to the image object.
Thus when the server push fails you should also get an alert message saying so.
Server Push is a popular method for webcams and their software
to present a continuous stream of images on a web page. It is the
fastest, easiest and most efficient way to do this! Even better,
you don't need any javascript code to update images on your web page
nor do you need any plugins to receive the stream.

This feature is of specific importance as Internet Explorer does
not support it on the windows system and needs Active-X controls
to simulate it.

We need the server push to work flawlessly soon. It's a
major application for web pages presenting streamed images.

Therefore, this bug gets my vote.
Why oh why is this bug set to WONTFIX ?

According to "A Bug's Life Cycle" WONTFIX means:
The problem described is a bug which will never be fixed.

Can anybody change the resolution state, please?
maybe Mobotix (used on http://kamera3.kaiserslautern.de:8903/ ) needs to fix
their software too ? See Axis which fixed their webcam code and it now works on
Gecko: see bug 167784 comment 21.
Whatever happened to 'be liberal in what you accept, be strict in what you
produce'? I can't think of any situation where it benefits the user to display a
broken image icon rather than reload the stream. There is a documented way to
stop streaming data cleanly, and in the abscense of this is in not a reasonable
assumption that the author intended the stream to continue being displayed?
Olivier Cahagne,

the server push used on http://kamera3.kaiserslautern.de:8903/ works
flawlessly on Netscape 4.7x and Internet Explorer for Mac. Why do you 
prefer to think that the camera's server push is incorrect instead of Mozilla
being buggy?

Did you have a look at the server push contents?

 
Sorry I've been silent on this for a while after stirring it up. Things have
been very busy lately.

I and my colleagues have been looking at 'motion' and its webcam server. In fact
we've been rewriting it. The original code is utterly horrid, though it does
seem to produce basically compilant output.

However, our experiments seem to show that the Mozilla problem relates to the
multipart boundaries. *If* the boundary string is written in the same write()
call that writes the final block of the JPEG, then Mozilla is happy and streams
it nicely. 

If the boundary gets written in a different write() call though, it freezes.
This is true of Mozilla certainly up to 1.3b (official build-id 2003021008).

It may be more difficult to observe this over a WAN, where the MTU may be small
and network fragmentation might cause the boundary to get separated from the
final block of the JPEG. We get our results over ethernet (MTU 1500ish).

                               ***********

We are unsure as to exactly how the syntax of the boundary-string is supposed to
work, though Mozilla doesn't seem over-fussy about it. The spec *seems* to say
that you give a header of the form "Boundary-String=XXYYZZ" and that you sould
prepend "--" to this when actually generating a boundary, and if you want to
generate a final part to the stream then the last boundary should have "--" both
prepended and postpended. However, some example code on the net that shows this
in action declares the boundary string in the headers with the "--" already in
place, and then uses that string (without any more "--" prepended) as the actual
boundaries. Confusing to say the least.
bug 195193 has been created about comment #123 .

Please take your CCs there if you are interested in JPG push stuff.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: