gstreamer rtmpsrc 到 rtmpsink

Posted

技术标签:

【中文标题】gstreamer rtmpsrc 到 rtmpsink【英文标题】:gstreamer rtmpsrc to rtmpsink 【发布时间】:2012-08-27 14:09:19 【问题描述】:

我想使用 gstreamer rtmpsrc 插件从客户端机器捕获通过网络摄像头生成的实时传入 Flash 媒体流,并将其转换为某种可处理的格式。 问题是当我尝试使用以下命令查看传入的 rtmp flash 媒体流时,我可以看到输出,但是当我尝试使用 filesink 将流保存到文件时,它根本不起作用。

gst-launch-0.10 rtmpsrc location='rtmp://127.0.0.1/flvplayback/mynewstream live=1' ! flvdemux name=d d. ! queue ! decodebin ! xvimagesink

我也不会将此管道构建到 C/C++ 程序中,以便我可以处理传入的元素。 我已经为“ filesrc --> appsrc --> appsink --> filesink ”编写了代码,它工作正常。

但是,当我为“rtmpsrc -->appsrc --> appsink--> rtmpsink”编写代码时,它不起作用。 我是 gstreamer 编程的新手,所以你能帮助我或告诉我在哪里可以获得这样的编程教程或示例的好资源。

我的系统配置:

Linux Ubuntu 12.04 64 位

crtmpserver x86_64

gstreamer 0.10

【问题讨论】:

【参考方案1】:

我认为你可以使用 flvdemux 分离视频(H.264)和音频(MPEG 4 AAC),然后处理它们。例如延迟10秒:queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 min-threshold-time=10000000000

示例:

gst-launch-1.0 rtmpsrc location=rtmp://XXXX ! flvdemux name=mydemuxer flvmux name=mymuxer ! queue ! rtmpsink location=rtmp://XXXX mydemuxer.audio ! queue ! mymuxer.audio mydemuxer.video ! queue ! mymuxer.video

【讨论】:

【参考方案2】:

为什么需要appsrc 和appsink?试试 rtmpsrc ! filesink 直接转储文件。

【讨论】:

正如我已经提到的那样,我想处理传入的流并流出处理过的数据,这就是我需要 appsrc 和 appsink 的原因。如果您认为我错了,或者您知道任何其他相同的方法,请分享。 嗯,除非你用“它不起作用”来描述你的意思,否则很难说出该怎么做。它不预卷,它不进入播放状态。一些输出转储等。尝试在您的appsrc和appsink之间添加一个队列并检查。您可以通过在您的应用程序中执行 fwrite 或其他方式来检查数据是否来自 appsrc。然后通过在appsink 之后放置一个filesink 来检查数据是否从appsink 中出来,依此类推。检查问题出在哪里。 你能告诉我在哪里可以获得编写 gstreamer 应用程序的教程吗? “它不起作用”是指它给出“rtmp server sent error”并退出。其次是另一个命令,例如“gst-launch-0.10 rtmpsrc location='rtmp://127.0.0.1/flvplayback/mynewstream live=1'!flvdemux name=video!video/x-flash-video!filesink location=/home/dev /ko.flv" 将 .flv 文件保存到磁盘,但是当我尝试使用 mplayer 打开它时会出现错误,如果我尝试查看很简单的 filesrc ---> xvimagesink 它会显示雪。 gstreamer 应用程序编写器手册是最好的起点。你必须一步一步来这里。 gstreamer.net 是获取所有文档的地方。顺便说一句,为什么要在写入文件之前进行解复用。不解复用 rtmpsrc 给你的东西,你不能直接写吗?只是问问。 好吧,正如我所说,我是 gstreamer 的新手,我正在通过网络搜索进行尝试。您为我的任务建议的 Whjat 解决方案。我的意思是,如果我想通过 rtmp 传输实时传入的 flash 媒体流并在程序中访问它来处理它,然后进一步将另一个 rtmp 实时流放到 crtmpd 服务器上,我应该使用什么命令或管道。正如我所说,当我通过 mplayer 打开这个 o.flv 文件时,它给出了不受支持的流错误,当我使用 xvimagesink 观看它时,它显示雪。这是否意味着下沉文件时存在错误或错误。对 ?你能提出任何关于 tht 的建议吗?

以上是关于gstreamer rtmpsrc 到 rtmpsink的主要内容,如果未能解决你的问题,请参考以下文章

广播rtmps流到许多服务器

如何在 Ant Media Server 中发布 RTMPS 流?

Gstreamer 音频输入到 mp3

管道stdout到gstreamer

GStreamer - RTSP 到 HLS / mp4

Gstreamer Plugin注册流程详解