工具/软件:TI C/C++编译器
您好:
我将在本地保存 test.ts 文件并使用以下 gstream 命令正确显示它。
gst-launch-1.0 -v 文件 rc location=test.ts! 排队! tsdemux! h264parse! ducatih264dec! 陆上接收机
我尝试使用 C 语言进行写入,编译执行时不显示映像。
这是我的源代码:
执行时、我尝试添加"-GST-DEBUG = 4"参数、红色部分显示错误消息
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
您好:
我将在本地保存 test.ts 文件并使用以下 gstream 命令正确显示它。
gst-launch-1.0 -v 文件 rc location=test.ts! 排队! tsdemux! h264parse! ducatih264dec! 陆上接收机
我尝试使用 C 语言进行写入,编译执行时不显示映像。
这是我的源代码:
执行时、我尝试添加"-GST-DEBUG = 4"参数、红色部分显示错误消息
您好!
在代码中、我看不到正确添加多路信号分离器元件。
使用 GST-CHECG-1.0 、您可以检查 SRC 和接收器模板。
以下是可添加多路信号分离器的示例:
静态空 on_pad_added (GstElement *元素、GstPad *填充、gpointer 数据)
{
GstPad *正弦板;
gchar *name;
GstElement * vqueue =(GstElement *)数据;
GstElement *排队=(GstElement *)数据;
/*将此焊盘与队列散热焊盘连接*/
名称= GST_PAD_GET_NAME (PAD);
if (strncmp (name、"video_00"、NULL)==0){
g_print ("已创建动态填充、链接多路信号分离器/灌电流\n");
SINKPAD = GST_ELECK_GET_STATUS_PAD (vqueue、"灌电流");
GST_PAD_LINK (PAD、SINKPAD);
GST_OBJECT_UNREF (SINKPAD);
}
否则、如果(strncmp (name、"audio_00"、 NULL)==0){
g_print ("动态填充已创建、链接多路信号分离器/异路复用器\n");
SINKPAD = GST_ELECK_GET_STATUS_PAD (Aqueue、"灌电流");
GST_PAD_LINK (PAD、SINKPAD);
GST_OBJECT_UNREF (SINKPAD);
}
printf ("%s"-新焊盘'%s'、\n"、__function__、name);
}
粗体测试应根据您使用的多路信号分离器(GS-Inspect 命令中的 SRC 和接收器模板)进行更改。
使用函数 g_signal_connect 、您可以"监听"新创建的多路信号分离器的焊盘并链接元件。
BR
玛格丽塔
您好!
请尝试以下代码:
#include
#include
静态 gboolean bus_call (GstBus *总线、GstMessage * msg、gpointer 数据)
{
GMainLoop * loop =(GMainLoop *)数据;
switch (GST_MESSAGE_TYPE (msg)){
案例 GST_MESSAGE_EOS:
g_print ("流结束\n");
G_MAIN_LOOP_QUIT (LOOP);
中断;
案例 GST_MESSAGE_ERROR:{
gchar *调试;
GError *错误;
GST_MESSAGE_PART_ERROR (msg、&error、&DEBUG);
G_FREE (调试);
G_printerr ("错误:%s\n"、错误->消息);
G_ERROR_FREE (错误);
G_MAIN_LOOP_QUIT (LOOP);
中断;
}
默认值:
中断;
}
返回 true;
}
静态空 on_pad_added (GstElement *元素、GstPad *填充、gpointer 数据)
{
GstPad *正弦板;
gchar *name;
GstElement * vqueue =(GstElement *)数据;
GstElement *排队=(GstElement *)数据;
/*将此焊盘与队列散热焊盘连接*/
名称= GST_PAD_GET_NAME (PAD);
if (strncmp (name、"video_0041"、NULL)==0){
g_print ("已创建动态填充、链接多路信号分离器/灌电流\n");
SINKPAD = GST_ELECK_GET_STATUS_PAD (vqueue、"灌电流");
GST_PAD_LINK (PAD、SINKPAD);
GST_OBJECT_UNREF (SINKPAD);
}
printf ("%s"-新焊盘'%s'、\n"、__function__、name);
}
int main (int argc、char * argv[])
{
GMainLoop *LOOP;
GstBus *总线;
GstCaps *caps;
GstElement *管道;
GstElement *文件 rc;
GstElement *多路解复用器;
GstElement *虚拟队列;
GstElement *解析器;
GstElement *解码器;
GstElement *vsink;
/*初始化*/
GST_init (&argc、&argv);
LOOP = g_main_loop_new (NULL、false);
/*创建 gstreamer 元素*/
流水线= GST_F管线_NEW ("tsplay");
filesrc = gst_element_factory_make ("filesrc"、"filesource");
G_RETURE_VAL_IF_FAIL (文件 rc、-1);
G_object_set (G_object (filesrc)、"location"、argv[1]、NULL);
多路信号分离器= GST_ELECIN_FACTOR_make ("tsdemux"、"Demux");
G_RETURE_VAL_IF_FAIL (多路信号分离器、-1);
vqueue = gst_element_factory_make ("队列"、"vqueue");
G_RETURE_VAL_IF_FAIL (vqueue、-1);
解析器= gst_elie_factory_make ("h264pars"、"解析器");
G_RETURE_VAL_IF_FAIL (解析器、-1);
解码器= GST_ELECK_factory_make ("ducatih264dec、"解码器");
G_RETURE_VL_IF_FAIL (解码器、-1);
vsink = gst_elue_factory_make ("waylandsink"、"sink");
G_RETURE_VAL_IF_FAIL (vsink、-1);
/*添加消息处理程序*/
总线= GST_F管线_GET_BUS (GST_管线(管线));
GST_BUS_ADD_WATCH (BUS、BUS_CALL、LOOP);
GST_OBJECT_UNREF (总线);
/*在链接元素之前将元素添加到管道中。*/
gst_bin_add (gst_bin (流水线)、文件 rc);
GST_BIM_ADD (GST_BIN (流水线)、多路信号分离器);
GST_BIM_ADD (GST_BIN (流水线)、vqueue);
GST_BIN_ADD (GST_BIN (流水线)、解析器);
GST_BIM_ADD (GST_BIN (流水线)、解码器);
GST_BIM_ADD (GST_BIN (流水线)、VSINK);
/*链接管道*/
gst_elem_link_pads (文件 rc、"src"、多路解复用器、"接收器");
GST_ELECK_LINK_PADS (多路信号分离器、"src"、vqueue、"接收端");
/*收听新创建的焊盘*/
G_signal_connect (G_object (多路信号分离器)、"pad-added"、G_callback (ON_pad_added)、vqueue);
gst_element_link_pads (vqueue、"src"、解析器、"sink");
GST_ELECK_LINK_PADS (解析器、"src"、解码器、"接收器");
GST_ELECTER_LINK_PADS (解码器、"src"、VSINK、"接收器");
/*将流水线设置为"播放"状态*/
g_print ("正在播放:%s\n"、argv[1]);
GST_ELECK_SET_STATE (流水线、GST_STATE_Playing);
/*迭代*/
g_print ("正在运行...\n");
G_MAIN_LOOP_RUN (LOOP);
/*在主循环之外,清理得很好*/
g_print ("已返回、正在停止回放\n");
GST_ELECK_SET_STATE (流水线、GST_STATE_NULL);
G_PRINT ("删除管道\n");
GST_OBJECT_UNREF (GST_object (流水线));
返回0;
}
请告诉我结果。
执行:./
BR
玛格丽塔