mp4mux & appsink

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

mp4mux & appsink

Kristoffer

Hi there,


I'm trying to pipe the output from mp4mux into an appsink. They link just fine and no error messages are produced. However the resulting data is not a valid MP4 file. 


According to this thread: http://gstreamer-devel.966125.n4.nabble.com/appsink-can-t-get-qtmux-streamheader-td4119740.html mp4mux requires seeking in the output. Is this correct?


It all works fine when I use "streamable=true". Also I do send EOS to the pipeline.


/Kristoffer


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: mp4mux & appsink

Sebastian Dröge-3
On Mo, 2016-03-21 at 14:40 +0000, Kristoffer Glembo wrote:
> Hi there,
>
> I'm trying to pipe the output from mp4mux into an appsink. They link
> just fine and no error messages are produced. However the resulting
> data is not a valid MP4 file. 
>
> According to this thread: http://gstreamer-devel.966125.n4.nabble.com
> /appsink-can-t-get-qtmux-streamheader-td4119740.html mp4mux requires
> seeking in the output. Is this correct?

Yes, MP4 requires that the headers to include the positions to every
single frame/sample in the stream.

> It all works fine when I use "streamable=true". Also I do send EOS to
> the pipeline.

streamable=true is only valid for fragmented MP4 though.

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: mp4mux & appsink

Kristoffer
I'm trying to add seek support for appsink. But it seems that the appsink never receives the SEEKING query from the mp4mux.

Mp4mux claims downstream is not seekable:

qtmux gstqtmux.c:1695:gst_qt_mux_start_file:<mp4mux0> downstream is not seekable
qtmux gstqtmux.c:1707:gst_qt_mux_start_file:<mp4mux0> warning: Downstream is not seekable and headers can't be rewritten

But I've implemented handling of the seek query and the appsink never even receives the query. What can cause this?
Reply | Threaded
Open this post in threaded view
|

Re: mp4mux & appsink

Sebastian Dröge-3
On Do, 2016-03-24 at 03:32 -0700, Kristoffer wrote:

> I'm trying to add seek support for appsink. But it seems that the appsink
> never receives the SEEKING query from the mp4mux.
>
> Mp4mux claims downstream is not seekable:
>
> qtmux gstqtmux.c:1695:gst_qt_mux_start_file: downstream is not
> seekable
> qtmux gstqtmux.c:1707:gst_qt_mux_start_file: warning: Downstream is
> not seekable and headers can't be rewritten
>
> But I've implemented handling of the seek query and the appsink never even
> receives the query. What can cause this?
What's between your mp4mux and the appsink? And how did you implement
the handling of the SEEK query in appsink, and especially how would you
handle the actual seeking later?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: mp4mux & appsink

Kristoffer
Hi Sebastian!

I implemented it similar to filesink (sorry if this  gets strangely formatted):

case GST_QUERY_SEEKING:

gst_query_parse_seeking (query, &format, NULL, NULL, NULL); 

if (format == GST_FORMAT_BYTES)
 { 
     gst_query_set_seeking (query, GST_FORMAT_BYTES, TRUE, 0, -1); 
} else { 
    gst_query_set_seeking (query, format, FALSE, 0, -1); 
} 

And then I added a signal and callback  seek(guint64 offset) which is emitted on a SEGMENT event.

My appsink is basically a custom filesink. I had nothing between mp4mux and the appsink.

/Kristoffer
On Do, 2016-03-24 at 03:32 -0700, Kristoffer wrote:

> I'm trying to add seek support for appsink. But it seems that the appsink
> never receives the SEEKING query from the mp4mux.
>
> Mp4mux claims downstream is not seekable:
>
> qtmux gstqtmux.c:1695:gst_qt_mux_start_file: downstream is not
> seekable
> qtmux gstqtmux.c:1707:gst_qt_mux_start_file: warning: Downstream is
> not seekable and headers can't be rewritten
>
> But I've implemented handling of the seek query and the appsink never even
> receives the query. What can cause this?
What's between your mp4mux and the appsink? And how did you implement
the handling of the SEEK query in appsink, and especially how would you
handle the actual seeking later?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment



If you reply to this email, your message will be added to the discussion below:
http://gstreamer-devel.966125.n4.nabble.com/mp4mux-appsink-tp4676469p4676549.html
To unsubscribe from mp4mux & appsink, click here.
NAML
Reply | Threaded
Open this post in threaded view
|

Re: mp4mux & appsink

Sebastian Dröge-3
On Fr, 2016-03-25 at 01:42 -0700, Kristoffer wrote:

> Hi Sebastian!
>
> I implemented it similar to filesink (sorry if this  gets strangely
> formatted):
>
> [...]
> And then I added a signal and callback  seek(guint64 offset) which is
> emitted on a SEGMENT event.
>
> My appsink is basically a custom filesink. I had nothing between
> mp4mux and the appsink.
You probably want to consider writing a real sink element based on
GstBaseSink at this point.

Or adding generic API to appsink for this which can then be merged into
GStreamer, similar to what appsrc is doing and probably with an
additional property to opt-in for "seek" handling.

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: mp4mux & appsink

Kristoffer
Hi,


> You probably want to consider writing a real sink element based on 
> GstBaseSink at this point. 
>
> Or adding generic API to appsink for this which can then be merged into
On Fr, 2016-03-25 at 01:42 -0700, Kristoffer wrote:

> Hi Sebastian!
>
> I implemented it similar to filesink (sorry if this  gets strangely
> formatted):
>
> [...]
> And then I added a signal and callback  seek(guint64 offset) which is
> emitted on a SEGMENT event.
>
> My appsink is basically a custom filesink. I had nothing between
> mp4mux and the appsink.
You probably want to consider writing a real sink element based on
GstBaseSink at this point.

Or adding generic API to appsink for this which can then be merged into
GStreamer, similar to what appsrc is doing and probably with an
additional property to opt-in for "seek" handling.

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment



If you reply to this email, your message will be added to the discussion below:
http://gstreamer-devel.966125.n4.nabble.com/mp4mux-appsink-tp4676469p4676584.html
To unsubscribe from mp4mux & appsink, click here.
NAML