From: Rafael S. <raf...@gm...> - 2010-11-03 15:09:37
|
Hi Marco Thanks again, you solved my problem, the code worked beautifully. regards On Tue, Nov 2, 2010 at 4:13 PM, Rafael Sousa <raf...@gm...>wrote: > the gst-launch works fine for me, I was using the C API because was the > first example next to what I want that I found, but the command line way > works just fine too. > > I'll try your solution. Thanks very much for the attention. > > > On Tue, Nov 2, 2010 at 2:57 PM, Marco Ballesio <gib...@gm...>wrote: > >> Hi, >> >> On Mon, Nov 1, 2010 at 5:56 PM, Rafael Sousa <raf...@gm...>wrote: >> >>> Marco, >>> >>> The modification that you proposed to use the mp4mux didn't work. The >>> same error occurred. I'm using the yuv format because after the >>> transimission of the video, I intend to calculate the psnr between the >>> source yuv and the received yuv for academic analysis. But the mp4 format >>> also helps. >>> >> >> the attached recv.c should do the trick. I just wonder why at this point >> you can't simply use gst-launch... >> >> Regards >> >> >>> >>> Sorry,for the bothering, but I've reseached a lot before appealing to >>> this list. >>> >>> thanks for the help, >>> best regards,. >>> >>> >>> On Mon, Nov 1, 2010 at 4:44 AM, Marco Ballesio <gib...@gm...>wrote: >>> >>>> Hi, >>>> >>>> On Mon, Nov 1, 2010 at 2:46 AM, Rafael Sousa <raf...@gm...>wrote: >>>> >>>>> Hi Marco >>>>> >>>>> thank you so much for the help, it worked very well here... But what I >>>>> want is to store the video at the receiver in the disk. I tried to modify >>>>> this example that you sent to me, but it didn't saved the video. I modified >>>>> the following in the recv.c. I used the foreman_cif.yuv video sample >>>>> (352x288). >>>>> >>>>> >>>>> #define PIPELINE_FORMAT "\ >>>>> gstrtpbin name=rtpbin \ >>>>> udpsrc >>>>> caps=\"application/x-rtp,media=(string)video,clock-rate=90000,encoding-name=(string)H264\" >>>>> \ >>>>> port=5000 ! rtpbin.recv_rtp_sink_0 \ >>>>> rtpbin. ! rtph264depay ! ffdec_h264 ! *\" video/x-raw-yuv, width=352, >>>>> height=288, format=(fourcc)I420 \" ! filesink location=test_rcv.yuv* ! >>>>> \ >>>>> >>>> >>>> you don't need the capsfilter between decoder and filesink.. everything >>>> will automagically work ;). >>>> >>>> Btw, unless you're in love with raw yuv I suggest using a container >>>> format.. in this case you don't even need to decode and thus you could save >>>> some CPU at recording time. Try with this pipeline: >>>> >>>> >>>> gstrtpbin name=rtpbin \ >>>> udpsrc >>>> caps=\"application/x-rtp,media=(string)video,clock-rate=90000,encoding-name=(string)H264\" >>>> \ >>>> port=5000 ! rtpbin.recv_rtp_sink_0 \ >>>> rtpbin. ! rtph264depay ! *mp4mux ! filesink location=test_rcv.mp4* ! \ >>>> >>>> etc. etc. >>>> >>>> NOTE: you'll need to add a way to send the EOS to the muxer element >>>> (SIGHUP signal handler/read the manual ;) ), but setting the mp4mux property >>>> "faststart" to true could make the file playable even when manually stopping >>>> the pipeline with ctrl+c (discaimer: I've not tried it). >>>> >>>> Regards >>>> >>>> >>>>> udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \ >>>>> rtpbin.send_rtcp_src_0 ! udpsink port=5005 sync=false async=false" >>>>> >>>>> >>>>> it returned an error: >>>>> >>>>> Error: internal error in data stream. >>>>> >>>>> I'm very gratefull for your help. >>>>> >>>>> regards >>>>> >>>>> >>>>> >>>>> On Sun, Oct 31, 2010 at 4:48 PM, Marco Ballesio <gib...@gm...>wrote: >>>>> >>>>>> mmhh.. md5 from: >>>>>> http://gstreamer-devel.966125.n4.nabble.com/how-to-learn-from-yuv-files-and-encode-with-h-264-td3017365.html#a3017365 >>>>>> >>>>>> is different. Attaching the sources directly. >>>>>> >>>>>> Regards >>>>>> >>>>>> >>>>>> On Sun, Oct 31, 2010 at 10:33 PM, Marco Ballesio < >>>>>> gib...@gm...> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> it appears the app you sent is actually more complex than what you >>>>>>> need.. btw, some functions are not accessible from the code snippet you >>>>>>> sent. >>>>>>> >>>>>>> I found some soare time to write a minimalistic send/receive couple >>>>>>> of applications, the first one reading from a yuv file generated with: >>>>>>> >>>>>>> gst-launch -v videotestsrc num-buffers=2000 ! "video/x-raw-yuv, >>>>>>> width=320, height=240, format=(fourcc)I420" ! filesink location=test.yuv >>>>>>> >>>>>>> and streaming to an address specified from command line. The second >>>>>>> app opens a connection and renders all the h264 frames it receives from it. >>>>>>> Hopefully it will give you an idea about how to get your app working. >>>>>>> >>>>>>> P.S. added back the gst-devel mailing list to the loop. >>>>>>> P.P.S hopefully the attachment will make its way through the >>>>>>> moderation. >>>>>>> >>>>>>> Regards >>>>>>> >>>>>>> >>>>>>> On Fri, Oct 29, 2010 at 4:57 PM, Rafael Sousa < >>>>>>> raf...@gm...> wrote: >>>>>>> >>>>>>>> Hi Gibro, >>>>>>>> >>>>>>>> As I said, I'm a newbie in this list, and I don't know exactly how >>>>>>>> to fix the issues in my code, so, I'll send to you my whole code to you. If >>>>>>>> you may take a look I'd be be very gratefull for your help. >>>>>>>> >>>>>>>> regards >>>>>>>> >>>>>>>> >>>>>>>> On Fri, Oct 29, 2010 at 2:05 AM, Gibro Vacco <gib...@gm...>wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> it appears the sources you attached to the message did not go >>>>>>>>> through the moderation.. btw a few comments below. >>>>>>>>> >>>>>>>>> ..snip.. >>>>>>>>> >>>>>>>>> > *//Possible problem* >>>>>>>>> > * **size = 352*288*(3/2);* >>>>>>>>> > * **buffer = gst_buffer_try_new_and_alloc (size);* >>>>>>>>> >>>>>>>>> is there a particular reason for allocating this from the >>>>>>>>> application? The pipeline is usually handling buffer allocation/release >>>>>>>>> automagically. >>>>>>>>> >>>>>>>>> > * **if (buffer==NULL){* >>>>>>>>> > * ** g_printerr("failed to allocate memory\n");* >>>>>>>>> > * **}* >>>>>>>>> > *//Possible problem * >>>>>>>>> > * **gst_buffer_set_caps (buffer,caps);* >>>>>>>>> > *//Set up the video encoding parameters* >>>>>>>>> > * **caps = gst_caps_new_simple ("video/x-raw-yuv",* >>>>>>>>> > * **"format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('I', '4', '2', >>>>>>>>> '0'),* >>>>>>>>> > * **"width", G_TYPE_INT, 352,* >>>>>>>>> > * **"height", G_TYPE_INT, 288,* >>>>>>>>> > * **"framerate", GST_TYPE_FRACTION, 25, 1, NULL);* >>>>>>>>> > * **if ( !caps ) {* >>>>>>>>> > * **g_printerr("Failed to create caps\n");* >>>>>>>>> > * **return 0;* >>>>>>>>> > * **}* >>>>>>>>> > err = gst_element_link_filtered(filesrc, time, caps); >>>>>>>>> >>>>>>>>> what is the time element? It's possible caps are not propagated to >>>>>>>>> the encoder if not directly connected to the filesrc. >>>>>>>>> >>>>>>>>> Moreover, I didn't catch where you're setting the blocksize >>>>>>>>> property in your filesrc to "size". >>>>>>>>> >>>>>>>>> ..Snip.. >>>>>>>>> >>>>>>>>> > There is something wrong or missing in this function? How can I >>>>>>>>> make >>>>>>>>> > what I want to work? >>>>>>>>> >>>>>>>>> See my comments above ;) >>>>>>>>> >>>>>>>>> P.S. Maybe you could attach (or better copy to pastebin) the output >>>>>>>>> when setting GST-DEBUG to 2 from the shell prior executing your binary. >>>>>>>>> >>>>>>>>> Regards >>>>>>>>> >>>>>>>>> >>>>>>>>> > >>>>>>>>> > Please, I need help. >>>>>>>>> > >>>>>>>>> > thanks for the previous answers and thanks in advance >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > |