以上管道经过h264parse之后就没有00 00 00 01了 怎么回事
时间: 2023-08-01 21:15:34 浏览: 187
`00 00 00 01` 是H.264码流中的分隔符,用于标识不同的NAL单元。在Gstreamer中,`h264parse`元素会将原始的H.264码流解析成为一个个的NAL单元,并且去掉了NAL单元之间的分隔符。
因此,在 `rtph264pay` 元素中不再需要使用 `00 00 00 01` 分隔符,而是将每个NAL单元的前四个字节作为RTP包的负载进行传输,接收端再解析RTP包并将NAL单元重新组合成H.264码流。
总的来说,`h264parse` 元素的作用是去掉H.264码流中的分隔符,并将其解析成为一个个的NAL单元,以便于后续处理。
相关问题
如何在h264parse之后提取h264流的sps和pps信息 给个C的示例代码
在 GStreamer 中,可以使用 `h264parse` 元素的 `sps` 和 `pps` 属性来获取 H.264 流的 SPS 和 PPS 信息。以下是一个简单的 C 语言示例代码,演示如何获取 SPS 和 PPS 信息:
```c
#include <gst/gst.h>
#include <gst/video/video.h>
int main(int argc, char *argv[])
{
GstElement *pipeline, *src, *h264parse;
GstCaps *caps;
const gchar *sps, *pps;
/* Initialize GStreamer */
gst_init(&argc, &argv);
/* Create the elements */
pipeline = gst_pipeline_new("pipeline");
src = gst_element_factory_make("filesrc", "src");
h264parse = gst_element_factory_make("h264parse", "h264parse");
/* Set the input file */
g_object_set(G_OBJECT(src), "location", "input.h264", NULL);
/* Add the elements to the pipeline */
gst_bin_add_many(GST_BIN(pipeline), src, h264parse, NULL);
/* Link the elements */
gst_element_link(src, h264parse);
/* Get the caps of the h264parse element */
caps = gst_pad_get_current_caps(gst_element_get_static_pad(h264parse, "src"));
/* Get the SPS and PPS information */
gst_video_parse_caps(caps, NULL, &sps, &pps);
/* Print the SPS and PPS information */
g_print("SPS: %s\nPPS: %s\n", sps, pps);
/* Clean up */
gst_caps_unref(caps);
gst_element_set_state(pipeline, GST_STATE_NULL);
gst_object_unref(pipeline);
return 0;
}
```
在上面的示例代码中,首先创建了 `filesrc` 和 `h264parse` 元素,并将它们添加到管道中。然后设置了输入文件的路径,将两个元素进行链接,并使用 `gst_pad_get_current_caps` 函数获取 `h264parse` 元素的当前 caps。接着使用 `gst_video_parse_caps` 函数解析 caps,并获取 SPS 和 PPS 信息。最后打印出 SPS 和 PPS 信息,并清理资源。
需要注意的是,这个示例代码只是一个简单的演示,实际使用中还需要进行错误处理和其他必要的操作。
gst-launch-1.0 filesrc location=~/Downloads/FPV_2021-0-1_12-37-23.h264 ! h264parse config-interval=-1 ! avdec_h264 ! x264enc ! filesink location=test0612.h264之后为什么生成的文件无法进行播放,在编解码之前的文件可以正常播放
这是因为在你的管道中,你使用了`x264enc`元素将H.264视频文件重新编码为H.264格式,并将其保存为`test0612.h264`文件。但是,大多数播放器可能无法直接播放重新编码的H.264文件,因为重新编码可能导致一些兼容性问题。
如果你想要将H.264视频文件重新编码为其他格式,以便更好地兼容各种播放器,你可以尝试使用其他编码器,例如`x265enc`或`vp8enc`,或者使用其他格式,例如MPEG-4或VP8。
如果你只是想保存原始H.264视频文件而不进行重新编码,请使用以下管道:
```
gst-launch-1.0 filesrc location=~/Downloads/FPV_2021-0-1_12-37-23.h264 ! h264parse ! mp4mux ! filesink location=test0612.mp4
```
这个管道将原始H.264视频文件转换为MPEG-4格式,并将其保存为`test0612.mp4`文件。这样做可以更好地兼容各种播放器,并且不会对视频文件进行重新编码。
阅读全文