One problem about gstreamer encoding.

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

One problem about gstreamer encoding.

surprised
Hi,everyone. I'm trying to encode video to H265 bitstream with a YUV file in Gstreamer,then I send the H265 bitstream through Local Area Network to another host in this LAN and store them as a h265 file.In order to check that how much frames are there in this file,I decoded this file to YUV file,which can be calculated with the parameters of resolution ratio.I found a phenomenon:The decoded YUV file contains less frames than the YUV file before encoding(approximately dropped out 3 frames in each test). Why? I konw that in FFMpeg, there is a function called "flush_encoder()" will be invoked after encoding,which is used to output the remaining AVPacket in the encoder. I want to konw if Gstreamer has some similar operations I didn't use,which caused less frames than I expected. If hasn't, what's the reason actually?

Sent from the GStreamer-devel mailing list archive at Nabble.com.

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

AW: One problem about gstreamer encoding.

Thornton, Keith

Hi,

in order to get all frames, you have to send an EOS down the pipeline after the last frame and then wait until EOS is posted on the message bus.

Gruesse

 

Von: gstreamer-devel <[hidden email]> Im Auftrag von surprised
Gesendet: Dienstag, 22. Oktober 2019 03:31
An: [hidden email]
Betreff: One problem about gstreamer encoding.

 

Hi,everyone. I'm trying to encode video to H265 bitstream with a YUV file in Gstreamer,then I send the H265 bitstream through Local Area Network to another host in this LAN and store them as a h265 file.In order to check that how much frames are there in this file,I decoded this file to YUV file,which can be calculated with the parameters of resolution ratio.I found a phenomenon:The decoded YUV file contains less frames than the YUV file before encoding(approximately dropped out 3 frames in each test). Why? I konw that in FFMpeg, there is a function called "flush_encoder()" will be invoked after encoding,which is used to output the remaining AVPacket in the encoder. I want to konw if Gstreamer has some similar operations I didn't use,which caused less frames than I expected. If hasn't, what's the reason actually?


Sent from the GStreamer-devel mailing list archive at Nabble.com.


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

Re: AW: One problem about gstreamer encoding.

surprised
Hi,Thornton, Keith. You say that I should send EOS down the pipeline. But I'm encoding video with live camera source,not file. If I send EOS,whether it seems the pipeline is stopped or not. After sending the EOS, can I still use the pipe a few seconds later without shutting down this pipe? I'm a new hand to Gstreamer.If you can provide some simple pseudo codes showing how the send the EOS without shutting down the pipe,I will be very pleased. Thank you all the same.
Thornton, Keith wrote
Hi, in order to get all frames, you have to send an EOS down the pipeline after the last frame and then wait until EOS is posted on the message bus. Gruesse Von: gstreamer-devel <[hidden email]> Im Auftrag von surprised Gesendet: Dienstag, 22. Oktober 2019 03:31 An: [hidden email] Betreff: One problem about gstreamer encoding. Hi,everyone. I'm trying to encode video to H265 bitstream with a YUV file in Gstreamer,then I send the H265 bitstream through Local Area Network to another host in this LAN and store them as a h265 file.In order to check that how much frames are there in this file,I decoded this file to YUV file,which can be calculated with the parameters of resolution ratio.I found a phenomenon:The decoded YUV file contains less frames than the YUV file before encoding(approximately dropped out 3 frames in each test). Why? I konw that in FFMpeg, there is a function called "flush_encoder()" will be invoked after encoding,which is used to output the remaining AVPacket in the encoder. I want to konw if Gstreamer has some similar operations I didn't use,which caused less frames than I expected. If hasn't, what's the reason actually? ________________________________ Sent from the GStreamer-devel mailing list archive<https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgstreamer-devel.966125.n4.nabble.com%2F&data=02%7C01%7C%7Cb64d2c54054447e2aac208d756cb9cbc%7C28042244bb514cd680347776fa3703e8%7C1%7C0%7C637073304818382844&sdata=ZPQz%2BT03U1Qxus55ye1%2BIPPWBjnSnxiTR%2BXbgUyhlYg%3D&reserved=0> at Nabble.com. _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


Sent from the GStreamer-devel mailing list archive at Nabble.com.

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

AW: AW: One problem about gstreamer encoding.

Thornton, Keith

Hi,

if you want to flush all the buffers out of the Encoder so that the file has all the buffers you have sent, you have to send EOS otherwise the encoder will keep some Reference frames.

If you want to close the file, you can set the pipeline state to ready, assign a new file and then set the pipeline to playing again.

 

Von: gstreamer-devel <[hidden email]> Im Auftrag von surprised
Gesendet: Mittwoch, 23. Oktober 2019 03:29
An: [hidden email]
Betreff: Re: AW: One problem about gstreamer encoding.

 

Hi,Thornton, Keith. You say that I should send EOS down the pipeline. But I'm encoding video with live camera source,not file. If I send EOS,whether it seems the pipeline is stopped or not. After sending the EOS, can I still use the pipe a few seconds later without shutting down this pipe? I'm a new hand to Gstreamer.If you can provide some simple pseudo codes showing how the send the EOS without shutting down the pipe,I will be very pleased. Thank you all the same.

Thornton, Keith wrote

Hi, in order to get all frames, you have to send an EOS down the pipeline after the last frame and then wait until EOS is posted on the message bus. Gruesse Von: gstreamer-devel <[hidden email]> Im Auftrag von surprised Gesendet: Dienstag, 22. Oktober 2019 03:31 An: [hidden email] Betreff: One problem about gstreamer encoding. Hi,everyone. I'm trying to encode video to H265 bitstream with a YUV file in Gstreamer,then I send the H265 bitstream through Local Area Network to another host in this LAN and store them as a h265 file.In order to check that how much frames are there in this file,I decoded this file to YUV file,which can be calculated with the parameters of resolution ratio.I found a phenomenon:The decoded YUV file contains less frames than the YUV file before encoding(approximately dropped out 3 frames in each test). Why? I konw that in FFMpeg, there is a function called "flush_encoder()" will be invoked after encoding,which is used to output the remaining AVPacket in the encoder. I want to konw if Gstreamer has some similar operations I didn't use,which caused less frames than I expected. If hasn't, what's the reason actually? ________________________________ Sent from the GStreamer-devel mailing list archive<https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgstreamer-devel.966125.n4.nabble.com%2F&data=02%7C01%7C%7Cb64d2c54054447e2aac208d756cb9cbc%7C28042244bb514cd680347776fa3703e8%7C1%7C0%7C637073304818382844&sdata=ZPQz%2BT03U1Qxus55ye1%2BIPPWBjnSnxiTR%2BXbgUyhlYg%3D&reserved=0> at Nabble.com. _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

 


Sent from the GStreamer-devel mailing list archive at Nabble.com.


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

Re: AW: AW: One problem about gstreamer encoding.

surprised
Hi,Thornton, Keith. Did you mean that EOS can function as some flushing operation? Is there some specialized funciton that flushes all the buffers out of the Encoder? Because I've tried send the EOS,but it didn't work...

Sent from the GStreamer-devel mailing list archive at Nabble.com.

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

AW: AW: AW: One problem about gstreamer encoding.

Thornton, Keith

You could try sending flush_start followed by flush_stop. I haven’t tried it and don’t know how the encoder would react. A test application in which you can try these things out is always useful.

 

Von: gstreamer-devel <[hidden email]> Im Auftrag von surprised
Gesendet: Mittwoch, 23. Oktober 2019 15:09
An: [hidden email]
Betreff: Re: AW: AW: One problem about gstreamer encoding.

 

Hi,Thornton, Keith. Did you mean that EOS can function as some flushing operation? Is there some specialized funciton that flushes all the buffers out of the Encoder? Because I've tried send the EOS,but it didn't work...


Sent from the GStreamer-devel mailing list archive at Nabble.com.


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

Re: AW: AW: AW: One problem about gstreamer encoding.

surprised
Hi, it works now! I try to send EOS in both sender and receiver programs and I can get the full frames. In the past, I just try to send EOS only in sender,without receiver,so I cannot get the full frames. Thank you for you patient help!

Sent from the GStreamer-devel mailing list archive at Nabble.com.

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

Re: AW: AW: AW: One problem about gstreamer encoding.

surprised
In reply to this post by Thornton, Keith
Hi,but now I encountered another peoblem:After I send the EOS,how can I continue push data into the pipeline? It seems that once I send the EOS,then the pipeline stop to receive data into the pipe. I want to achieve a situation:as to the sender, I use appsrc to input outsider data into the pipe and and once every 200 frames are sended into appsrc,I send EOS,and at the same time I stop input data.After 10s,I start to input data again,but at that time,the pipe seems not going to receive data because the previous EOS signal. What should I do to let the pipe receive data again without shutting down the pipe?

Sent from the GStreamer-devel mailing list archive at Nabble.com.

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

AW: AW: AW: AW: One problem about gstreamer encoding.

Thornton, Keith

Hi in this case EOS is not the correct solution. Maybe tell us a little more about what you are trying to do and what the pipelines look like with which you are currently trying.

Gruesse

 

Von: gstreamer-devel <[hidden email]> Im Auftrag von surprised
Gesendet: Freitag, 25. Oktober 2019 10:00
An: [hidden email]
Betreff: Re: AW: AW: AW: One problem about gstreamer encoding.

 

Hi,but now I encountered another peoblem:After I send the EOS,how can I continue push data into the pipeline? It seems that once I send the EOS,then the pipeline stop to receive data into the pipe. I want to achieve a situation:as to the sender, I use appsrc to input outsider data into the pipe and and once every 200 frames are sended into appsrc,I send EOS,and at the same time I stop input data.After 10s,I start to input data again,but at that time,the pipe seems not going to receive data because the previous EOS signal. What should I do to let the pipe receive data again without shutting down the pipe?


Sent from the GStreamer-devel mailing list archive at Nabble.com.


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