我的目标是捕获视频,使用 x264 对其进行编码,通过 RTP 流式传输,在 Android 上接收,解码并以尽可能低的延迟显示。编码器/发送器机器是安装了 OSS 构建“GStreamer-WinBuilds-GPL-x86-Beta04-0.10.7.msi”的 Windows 7(于 03.2011 发布)。它愉快地运行如下所示的捕获/编码/流管道:
gst-launch.exe -v ksvideosrc 设备索引=0 !视频速率!视频/x-raw-yuv,宽度=320,高度=240,帧率=30/1!ffmpeg色彩空间!x264enc 调=零延迟!rtph264pay!udpsink 主机=127.0.0.1 端口=5400
我已经使用在同一台机器上运行的客户端管道测试了流:
gst-launch.exe udpsrc port=5400 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" !gstrtpjitterbuffer !rtph264depay!h264解析!ffdec_h264 !ffmpeg色彩空间!视频缩放!“视频/x-raw-yuv,宽度=320,高度=240”!自动视频接收器
而且它玩得非常好。
我已经成功构建了一个基于 GStreamer 的 Android 应用程序,我可以构建自定义 pipilenes 并在 Android 上运行它们。但是,当我流式传输到我的手机 IP 并在 Android 上运行相同的接收器管道时,我会看到质量非常低的无法观看的残缺视频,画面上到处都是块和伪影。
Android 的 GStreamer SDK 版本是:http ://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2012.11.zip 看起来它是一个较新的版本。
所以我决定在我的 Windows 7 机器上安装相同版本的 GStreamer SDK:http: //cdn.gstreamer.com/windows/x86-64/gstreamer-sdk-x86_64-2012.11.msi
现在,当我在 Windows 上使用较旧的 OSS 构建和接收器管道使用较新的 SDK 构建运行发送器管道时,我得到了与在 Android 上相同的效果:显示视频但它已损坏。我无法使用较新的 SDK 作为发送方在 Windows 上对其进行测试,因为新的 SDK 不包含任何编码器,而且我不清楚如何添加任何编码器。
所以问题是:如何在 Windows 上作为编码器和在 Android 上作为接收器运行相同版本的 GStreamer?