AnsweredAssumed Answered

vpuenc and matroskamux produce file of zero length

Question asked by Robbie Jiang on Oct 2, 2015
Latest reply on Oct 6, 2015 by Yuri Muhin

Hi all,

 

 

I'm trying to stream video in H.264 format from mx6q,

then receive  and save into a mkv file on PC.

 

But the length of the generated file is zero.

 

The sender pipeline on  mx6q machine (192.168.1.10):

 

gst-launch -v gstrtpbin name=rtpbin \

    tvsrc device=/dev/video1 ! 'video/x-raw-yuv,format=(fourcc)UYVY,width=720,height=576,framerate=25/1' ! mfw_ipucsc ! 'video/x-raw-yuv,format=(fourcc)I420, width=720,height=576,framerate=25/1'! vpuenc codec=avc bitrate=200 gopsize=5 ! video/x-h264,width=720,height=576 ! rtph264pay mtu=512 ! rtpbin.send_rtp_sink_0 \

    rtpbin.send_rtp_src_0 ! udpsink host=192.168.1.68 port=50000  \

    rtpbin.send_rtcp_src_0 ! udpsink host=192.168.1.68 port=50001 sync=false async=false \

    udpsrc port=50002 ! rtpbin.recv_rtcp_sink_0

 

I'm sure the sender pipeline works fine,

as the following pipeline can decode and display video on PC(192.168.1.68):

 

gst-launch -v gstrtpbin name=rtpbin  \

        udpsrc port=50000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z0JAHqaAtBJkAA\\=\\=\\,aM48gAA\\=\", ssrc=(uint)3684346187, payload=(int)96, clock-base=(uint)1526856633, seqnum-base=(uint)47590" ! rtpbin.recv_rtp_sink_0 \

        rtpbin. ! rtph264depay ! ffdec_h264 ! xvimagesink \

         udpsrc port=50001 ! rtpbin.recv_rtcp_sink_0 \

    rtpbin.send_rtcp_src_0 ! udpsink host=192.168.1.10 port=50002 sync=false async=false

 

 

However, the following receiver pipeline on PC (192.168.1.68)  produce a file of 0 byte length:

 

gst-launch -v gstrtpbin name=rtpbin \

    udpsrc port=50000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z0JAHqaAtBJkAA\\=\\=\\,aM48gAA\\=\", ssrc=(uint)3684346187, payload=(int)96, clock-base=(uint)1526856633, seqnum-base=(uint)47590' ! rtpbin.recv_rtp_sink_0 \

    rtpbin. ! rtph264depay ! h264parse ! matroskamux ! filesink location=./test.mkv \

         udpsrc port=50001 ! rtpbin.recv_rtcp_sink_0 \

         rtpbin.send_rtcp_src_0 ! udpsink port=50002 host=192.168.1.10  sync=false async=false

 

Unfortunately, file "test.mkv" is 0 byte when the receiver pipeline ends.

 

So why can not  matroskamux  produce a valid file?

 

From the outputs of the receiver pipeline, I noticed

 

/GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)nal

 

Seems that the format of the H264 stream produced by vpuenc is not compatible with

what matroskamux requires:

"video/x-h264, stream-format=(string)avc, alignment=(string)au"

 

Is this the possible reason?

 

How to receive and save a correct H264 file at the receive side?

 

 

 

Thanks.

Outcomes