Ok, I agree with you that this would be a working solution, but it is a 
very hacky one.
There are some points in that solution that are not acceptable for the 
usage in a video-conferencing system:
1. delay: more than 1 sec is too much. Think of a phone call, if you have 
to wait 4sec to get an reaction from your callee. That would not work.
2. gaps: when I stop, reset, reconfigure and start the MediaRecoder again, 
there is a gap of at least 1 sec. Result: 1sec video => 1sec still-image => 
and so on
3. low compression rate: video coding means, reduce temporal redundancies 
between the images and transmit only the changes. At the beginning of a 
sequence (in our case every second), all the image is changed and I have to 
generate a key-frame (large amount of data)
4. low quality: because of 3. I must reduce the video quality to fit the 
available data rate from my connection

As a result, it would be better to use JPEG or other still image 
compression methods. So I get a constant low frame rate and not a jerky 
one. Or use a software h264 encoder like ffmpeg.

I'm very disappointed with that conclusion. There is a hardware h.264 
encoder at my device an it is useless. 


On Monday, March 19, 2012 11:16:25 AM UTC+1, Daniel Drozdzewski wrote:
>
> Paul,
>
> Yes, you got it spot on (and well done for your ASCII art skills).
>
> Now as you can imagine, the video will be transmitted in chunks. The
> size of the all chunks will more-less depend on the size of the
> initial chunk. So in your timeline the delay on the receiver side is
> really 4 chunks not 4 seconds. What if your first chunk was 0.5s long?
> Then the delay is going to be  4 x 0.5s (not counting transmission
> delays). What if you could get away with chunks 0.25sec long? 1 to 2
> sec delay is not bad I think.
>
> You will struggle to lower it any further, as you are talking about
> establishing of the connection (could be done before the transmission)
> , buffering and shifting that buffer to the receiver. Network latency
> is quite big in mobile data networks. Poor connection (and the data
> rate dropping down to GPRS rates) will affect this too. However this
> solution is adaptive and better bandwidth will make the double
> buffering perform the swaps quicker (which I think is a very nice
> feature).
>
> Now to achieve the first chunk to have 0.5s or 0.25s, have a look at
> MediaRecorder.setMaxDuration() and MediaRecorder.OnInfoListener. You
> will have to set it only for the first chunk... but possibly there is
> more logic that could be done around it to optimise the whole thing.
>
>
> Daniel
>
>
> On 19 March 2012 09:52, paul <[email protected]> wrote:
> > Thanks for the answer. I also think I don't get your point :D
> > I try to explain my understand of your point with a little graphic.
> >
> > Timeline:
> >
> >                         sec
> >
> > 
> 0---------------1----------2--------------------------------------------------------------3-----4--------------------------------------------------------------------------------------5-----6------------------------->
> > Sender:             StartRecord0();
> > StopRecord0();StartSend0();StartRecord1();
> > FinishSend0();StopRecord1();StartSend1();StartRecord2();
> > FinishSend1();StopRecord2();StartSend2();StartRecord3();
> >
> > Receiver:                                        StartReceive0();
> >
> > FinishReceive0();StartPlay0();StartReceive1();
> > StopPlay0():FinishReceive1(); StartPlay1();StartReceive2();
> >
> >
> > In my opinion that's the way you mean. But as you see, the recorded video
> > from second 0 to 2 will be played on the receiver side from second 4 to 
> 6.
> > Maybe it can be optimized to play the received video-stream directly 
> after
> > the StartReceive, but so the video is played from second 2 to 4. That 
> means
> > there is a delay of at least 2 seconds. Am I right?
> >
> >
> > On Saturday, March 17, 2012 8:20:18 AM UTC+1, Daniel Drozdzewski wrote:
> >>
> >>
> >>
> >> On Friday, 16 March 2012, paul <[email protected]> wrote:
> >> > Thank you for than answer, but that isn't a solution for the problem.
> >> > Doing it that way, leads to a delay depending on the recording time 
> to that
> >> > file. Also there would be an interruption of the video stream.
> >>
> >> I don't think you got the idea... Recording would be happening to fileB
> >> while previously recorded fileA would be sent through the socket at the 
> same
> >> time. The only interuption in the video stream would be due to stopping 
> of
> >> the recording, passing the recorded file to the sender, reseting of the
> >> recorder and setting it up with the new file. All that should take 
> under a
> >> second.
> >>
> >> HTH
> >>
> >> > I want to use the captured and encoded video for videoconferencing, so
> >> > any kind of delay is not acceptable.
> >> >> ..do you mean storing it in the buffer and creating a delay/jitter?
> >> > It seem to me that the video encoder works in that way. I don't want a
> >> > delay.
> >> >
> >> > Am Freitag, 16. März 2012 17:54:29 UTC+1 schrieb Daniel Drozdzewski:
> >> >>
> >> >> On 16 March 2012 15:22, paul <[email protected]> wrote:
> >> >> > Then it would write out the data when the stop function is called.
> >> >>
> >> >> ..do you mean storing it in the buffer and creating a delay/jitter?
> >> >>
> >> >> You will have to look at double buffering using 2 files ... while one
> >> >> is being recorded to, the other will be sent through the socket. Once
> >> >> writing is finished, you stop the recorder, point it at new file and
> >> >> restart it, while taking  just finished file and sending it. Sent
> >> >> files can be discarded or left for the sake of having a local copy.
> >> >>
> >> >> --
> >> >> Daniel Drozdzewski
> >> >
> >> > --
> >> > You received this message because you are subscribed to the Google
> >> > Groups "Android Developers" group.
> >> > To post to this group, send email to 
> [email protected]
> >> > To unsubscribe from this group, send email to
> >> > [email protected]
> >> > For more options, visit this group at
> >> > http://groups.google.com/group/android-developers?hl=en
> >>
> >> --
> >> Daniel Drozdzewski
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> > For more options, visit this group at
> > http://groups.google.com/group/android-developers?hl=en
>
> -- 
> Daniel Drozdzewski
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to