rendered paste body// convert an audiovisual mms to an avi
bool mms_to_avi(std::string mmsURL, std::string aviURL) {
if (!regex_search(mmsURL, boost::regex("\\.mms$"))) return false;
if (!regex_search(aviURL, boost::regex("\\.avi$"))) return false;
// pipeline and elements
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
GstElement *pipeline = gst_pipeline_new("mms to avi pipeline");
GstElement *decode = gst_element_factory_make("decodebin", "decoder");
// video stream
GstElement *videoin = gst_element_factory_make("videoscale", "videoin");
GstCaps *video_cap = gst_caps_new_simple("video/x-raw-yuv", "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC('I','4','2','0'), "framerate", G_TYPE_DOUBLE, 29.97, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, "width", G_TYPE_INT, 640, "height", G_TYPE_INT, 480, NULL);
GstElement *ffenvid = gst_element_factory_make("ffenc_mpeg4", "ffenvid");
g_object_set(G_OBJECT(ffenvid), "bitrate", 512, NULL);
// audio stream
GstElement *audioin = gst_element_factory_make("audioconvert", "audioin");
GstElement *audioco = gst_element_factory_make("audioresample", "audioco");
GstCaps *audio_cap = gst_caps_new_simple("audio/x-raw-int", "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 2, NULL);
GstElement *lameenc = gst_element_factory_make("lame", "lameenc");
g_object_set(G_OBJECT(lameenc), "bitrate", 64, NULL);
// connect the decodebin
g_signal_connect(decode, "new-decoded-pad", G_CALLBACK(cb_newpad), videoin);
g_signal_connect(decode, "new-decoded-pad", G_CALLBACK(cb_newpad), audioin);
gst_caps_unref(audio_cap);
gst_caps_unref(video_cap);
return true;
}