Thanks mate that resolves issue number 2, ive yet to test the pausing problem

Steven Gong wrote:


On 12/12/06, *Costin Tuculescu* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Yeah, FMS does work this way... the function is publish("streamname",
    "record") so in order to record, it must be published.  Perhaps in the
    future, additional parameters or functions can be defined to
    record without
    publishing a live stream as well, but I really don't see a need
    for that...
    if thats needed, then you just make your clients not play back the
    stream as
    its being recorded.


Ok, if FMS works like this, I will merge the patch onto trunk. :-)

Thanks for your reporting Costin!

    Costin

    ----Original Message Follows----
    From: "Steven Gong" <[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>>
    Reply-To: [email protected] <mailto:[email protected]>
    To: [email protected] <mailto:[email protected]>
    Subject: Re: [Red5] Cannot subscribe to Live Stream if its being
    Recorded
    Date: Tue, 12 Dec 2006 13:28:17 +0800

    On 12/12/06, Dan Rossi <[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]> > wrote:
    >
    >  Hi this is the patch that i sent to be fixed, and it was said
    to be fixed
    >months ago ! so just copy the code from live into record ? why
    did it get
    >reverted ?
    >

    Well, I think it's just a workaround rather than a fix because I
    don't think
    we should publish every stream when it's recorded. Does FMS do this?

    Costin Tuculescu wrote:
    >
    >Hi Dan,
    >
    >I've made a modification to the publish method in the
    >StreamService.javaclass , and it did the trick for me.  Notice
    the parts
    >commented with "Added
    >by CT..."
    >
    >public void publish(String name, String mode) {
    >         log.info("publish: " + name + ", " + mode);
    >
    >         IConnection conn = Red5.getConnectionLocal();
    >         if (!(conn instanceof IStreamCapableConnection)) return;
    >         IStreamCapableConnection streamConn =
    (IStreamCapableConnection)
    >conn;
    >         int streamId = getCurrentStreamId();
    >         IClientStream stream = streamConn.getStreamById(streamId);
    >         if (stream != null && !(stream instanceof
    IClientBroadcastStream))
    >return;
    >         if (stream == null)
    >             stream = streamConn.newBroadcastStream(streamId);
    >
    >         IClientBroadcastStream bs = (IClientBroadcastStream) stream;
    >         try {
    >             if (IClientStream.MODE_RECORD.equals(mode)) {
    >                 //Added by CT to play and record at the same time:
    >                 IContext context = conn.getScope().getContext();
    >                 IProviderService providerService =
    (IProviderService)
    >context.getBean(IProviderService.KEY);
    >                 bs.setPublishedName(name);
    >                 // TODO handle registration failure
    >                 if
    >(providerService.registerBroadcastStream (conn.getScope(),
    >name, bs)) {
    >                     IBroadcastScope bsScope = getBroadcastScope(
    >conn.getScope(), bs.getPublishedName());
> bsScope.setAttribute(IBroadcastScope.STREAM_ATTRIBUTE ,
    >bs);
    >                     if (conn instanceof BaseConnection)
    >                         ((BaseConnection)
    >conn).registerBasicScope(bsScope);
    >                 }
    >                 // end add
    >
    >                 bs.start();
    >                 bs.saveAs(name, false);
    >             } else if (IClientStream.MODE_APPEND.equals(mode)) {
    >//                Added by CT to play and record at the same time:
    >                 IContext context = conn.getScope().getContext();
    >                 IProviderService providerService =
    (IProviderService)
    >context.getBean(IProviderService.KEY);
    >                 bs.setPublishedName(name);
    >                 // TODO handle registration failure
    >                 if
    >(providerService.registerBroadcastStream(conn.getScope(),
    >name, bs)) {
    >                     IBroadcastScope bsScope = getBroadcastScope(
    >conn.getScope(), bs.getPublishedName());
> bsScope.setAttribute(IBroadcastScope.STREAM_ATTRIBUTE,
    >bs);
    >                     if (conn instanceof BaseConnection)
    >                         ((BaseConnection)
    >conn).registerBasicScope(bsScope);
    >                 }
    >                 // end add
    >
    >                 bs.start();
    >                 bs.saveAs(name, true);
    >             } else if ( IClientStream.MODE_LIVE.equals(mode)) {
    >                 IContext context = conn.getScope().getContext();
    >                 IProviderService providerService =
    (IProviderService)
    >context.getBean(IProviderService.KEY );
    >                 bs.setPublishedName(name);
    >                 // TODO handle registration failure
    >                 if
    >(providerService.registerBroadcastStream(conn.getScope(),
    >name, bs)) {
    >                     IBroadcastScope bsScope = getBroadcastScope(
    >conn.getScope(), bs.getPublishedName());
> bsScope.setAttribute(IBroadcastScope.STREAM_ATTRIBUTE,
    >bs);
    >                     if (conn instanceof BaseConnection)
    >                         ((BaseConnection)
    >conn).registerBasicScope(bsScope);
    >                 }
    >                 bs.start();
    >             }
    >         } catch (Exception e) {
    >             // TODO report publish error
    >         }
    >     }
    >
    >So try replacing the original publish function in that class with
    this
    >one, and let me know if it does the trick.  It worked for
    me.  I've been
    >meaning to submit it back to the community but I've just been
    slammed, plus
    >I don't really know how to go about putting this type of stuff in the
    >trunk,
    >nor am I any good at programming Java.  The mod I made just made
    sense
    >based
    >on the stream being published as live -- the recorded streams
    didn't seem
    >to
    >be registering themselves with the scope.  So yeah, let me
    know.  Thanks.
    >
    >-Costin
    >
    >
    >----Original Message Follows----
    >From: Dan Rossi < [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>> <[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>>
    >Reply-To: [email protected] <mailto:[email protected]>
    >To: [email protected] <mailto:[email protected]>
    >Subject: Re: [Red5] Cannot subscribe to Live Stream if its being
    Recorded
    >Date: Tue, 12 Dec 2006 15:30:42 +1100
    >
    >any solutions ?
    >
    >Dan Rossi wrote:
    >
    >Hi does someone have a solution for subscribing to an archiving
    stream,
    >this hack below doesnt work, the broadcast stops at the server
    immediately.
    >  If i try play(stream, -1) the subscribe just hangs like the
    stream isnt
    >available even though the server aknowledges the publish name and
    the
    >server
    >stream aware handlers work fine and call the clients when a
    broadcast is
    >happening just cant stream.
    >
    >I am using the filenamegenerator bean to record to one path, and
    playback
    >a trailer in another path, could this be the problem, ive had my
    ticket
    >open
    >for ages now and got an ignorant response.
    >
    >If i call with play(stream, -2) i get an exception
    >
    >      [java] [ERROR] 1020437 pool-1-thread-15:(
    >org.red5.io.flv.impl.FLVReader.er
    <http://org.red5.io.flv.impl.FLVReader.er>
    >ror ) Error fillBuffer
    >      [java] java.lang.IllegalArgumentException
    >      [java]     at java.nio.ByteBuffer.allocate
    (ByteBuffer.java:311)
    >      [java]     at org.red5.io.flv.impl.FLVReader.fillBuffer(
    >FLVReader.java:242)
    >
    >      [java]     at
    org.red5.io.flv.impl.FLVReader.setCurrentPosition(
    >FLVReader.j
    >ava:170)
    >      [java]     at org.red5.io.flv.impl.FLVReader.analyzeKeyFrames(
    >FLVReader.jav
    >a:527)
    >      [java]     at org.red5.io.flv.impl.FLVReader.postInitialize(
    >FLVReader.java :
    >264)
    >      [java]     at
    >org.red5.io.flv.impl.FLVReader.<init>(FLVReader.java:275)
    >
    >      [java]     at org.red5.io.flv.impl.FLV.getReader(FLV.java:172)
    >      [java]     at
    >org.red5.server.stream.provider.FileProvider.init(FileProvide
    >
    >r.java:179)
    >      [java]     at
    >org.red5.server.stream.provider.FileProvider.pullMessage(File
    >Provider.java:87)
    >      [java]     at
    >org.red5.server.messaging.InMemoryPullPullPipe.pullMessage(In
    >MemoryPullPullPipe.java:72)
    >      [java]     at
    >org.red5.server.stream.PlaylistSubscriberStream$PlayEngine.pu
    >llAndPush(PlaylistSubscriberStream.java:847)
    >      [java]     at
    >org.red5.server.stream.PlaylistSubscriberStream$PlayEngine.pl
    >ay(PlaylistSubscriberStream.java:681)
    >      [java]     at
    >org.red5.server.stream.PlaylistSubscriberStream.play(Playlist
    >
    >SubscriberStream.java:124)
    >      [java]     at org.red5.server.stream.StreamService.play(
    >StreamService.java:
    >179)
    >      [java]     at org.red5.server.stream.StreamService.play(
    >StreamService.java:
    >187)
    >      [java]     at
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native
    >Method)
    >      [java]     at
    >sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAcces
    >
    >sorImpl.java:39)
    >      [java]     at
    >sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet
    >
    >hodAccessorImpl.java:25)
    >      [java]     at java.lang.reflect.Method.invoke (Method.java:585)
    >      [java]     at
    >org.red5.server.service.ServiceInvoker.invoke(ServiceInvoker.
    >
    >java:161)
    >      [java]     at org.red5.server.net.rtmp.RTMPHandler.invokeCall(
    > RTMPHandler.j
    >ava:135)
    >      [java]     at org.red5.server.net.rtmp.RTMPHandler.onInvoke(
    >RTMPHandler.jav
    >a:276)
    >      [java]     at
    >org.red5.server.net.rtmp.BaseRTMPHandler.messageReceived (Base
    >RTMPHandler.java:114)
    >      [java]     at
    >org.red5.server.net.rtmp.RTMPMinaIoHandler.messageReceived(RT
    >MPMinaIoHandler.java:84)
    >      [java]     at
    >org.apache.mina.common.support.AbstractIoFilterChain$2.messag
    >eReceived(AbstractIoFilterChain.java:189)
    >      [java]     at
    >org.apache.mina.common.support.AbstractIoFilterChain.callNext
    >MessageReceived(AbstractIoFilterChain.java:502)
    >      [java]     at
    >org.apache.mina.common.support.AbstractIoFilterChain.access$1
    >000(AbstractIoFilterChain.java:52)
    >      [java]     at
    >org.apache.mina.common.support.AbstractIoFilterChain$EntryImp
    >l$1.messageReceived( AbstractIoFilterChain.java:777)
    >      [java]     at
    >org.red5.io.filter.ExecutorFilter.processEvent(ExecutorFilter
    >
    >.java:231)
    >      [java]     at
    >org.red5.io.filter.ExecutorFilter$ProcessEventsRunnable.run (E
    >xecutorFilter.java:280)
    >      [java]     at
    >java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Thread
    >
    >PoolExecutor.java:650)
    >      [java]     at
    >java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPool
    >
    >Executor.java:675)
    >      [java]     at java.lang.Thread.run(Thread.java:595)
    >      [java] [INFO] 1020453 pool-1-thread-15:(
    >org.red5.io.flv.impl.FLVReader.inf
    >o ) New position exceeds limit
    >      [java] [INFO] 1020453 pool-1-thread-15:(
    >org.red5.server.stream.PlaylistSub
    >scriberStream.info ) Scheduled stop in: 1879753393
    >
    >I just checked with FMS, and my ported application was fine,
    subscribes at
    >it records.
    >
    >Alex Zimin wrote:
    >
    >I have the following code and it works just fine for me.
    >ns.publish("stream1", "live");
    >ns.publish("stream2", "record");
    >Client, which connects to live stream, is able to play it, and
    recording
    >happens at the same time.
    >  However I have a different problem. When I stop recording, by
    issuing
    >ns.close("stream2"); command, it closes both streams.
    >I am using Red5 0.6RC1.
    >  Any help?
    >  Thanks,
    >  Alex.
    >
    >
    >
    >_______________________________________________
    >Red5 mailing list
    > [email protected] <mailto:[email protected]>
    >http://osflash.org/mailman/listinfo/red5_osflash.org
    >
    >
    >
    >
    >
    >_______________________________________________
    >Red5 mailing list
    >[email protected] <mailto:[email protected]>
    >http://osflash.org/mailman/listinfo/red5_osflash.org
    >
    >_________________________________________________________________
    >All-in-one security and maintenance for your PC.  Get a free
    90-day trial!
    >
    >
    
http://clk.atdmt.com/MSN/go/msnnkwlo0050000002msn/direct/01/?href=http://clk.atdmt.com/MSN/go/msnnkwlo0050000001msn/direct/01/?href=http://www.windowsonecare.com/?sc_cid=msn_hotmail
    >
    >
    >------------------------------
    >
    >_______________________________________________
    >Red5 mailing list
    >[email protected] <mailto:[email protected]>
    > http://osflash.org/mailman/listinfo/red5_osflash.org
    >
    >
    >
    >_______________________________________________
    >Red5 mailing list
    >[email protected] <mailto:[email protected]>
    >http://osflash.org/mailman/listinfo/red5_osflash.org
    >
    >
    >


    --
    I cannot tell why this heart languishes in silence. It is for
    small needs it
    never asks, or knows or remembers.  -- Tagore

    Best Regards
    Steven Gong


    _______________________________________________
    Red5 mailing list
    [email protected] <mailto:[email protected]>
    http://osflash.org/mailman/listinfo/red5_osflash.org

    _________________________________________________________________
    Visit MSN Holiday Challenge for your chance to win up to $50,000
    in Holiday
    cash from MSN today!
    http://www.msnholidaychallenge.com/index.aspx?ocid=tagline&locale=en-us
    <http://www.msnholidaychallenge.com/index.aspx?ocid=tagline&locale=en-us>


    _______________________________________________
    Red5 mailing list
    [email protected] <mailto:[email protected]>
    http://osflash.org/mailman/listinfo/red5_osflash.org




--
I cannot tell why this heart languishes in silence. It is for small needs it never asks, or knows or remembers. -- Tagore

Best Regards
Steven Gong
------------------------------------------------------------------------

_______________________________________________
Red5 mailing list
[email protected]
http://osflash.org/mailman/listinfo/red5_osflash.org

_______________________________________________
Red5 mailing list
[email protected]
http://osflash.org/mailman/listinfo/red5_osflash.org

Reply via email to