Re: [PATCH v9 00/24] Add GStreamer support for video streaming

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/18/2016 01:03 PM, Francois Gouget wrote:

The source changed so here is the new revision of this patchset.

This patch series adds support for using GStreamer to encode and decode
the video streams, adding support for VP8 and h264 codecs. As before the
patches can also be grabbed from the repositories below:


Hi,

I've tried testing this patch-set with qemu-kvm.
I wrote a patch for qemu-kvm to enable this feature, see at the bottom.

I found it working with spice:mjpeg but hangs with gstreamer:vp8 codec.

I do not have x264 installed.
if I set video-codecs to "gstreamer:h264;spice:mjpeg" and also with
gstreamer:h264 it falls back to spice:mjpeg.

With gstreamer:mjpeg it also fallbacks to spice:mjpeg with the following
error:
Spice-Debug **: gstreamer-encoder.c:795:create_pipeline: GStreamer pipeline: appsrc name=src format=2 do-timestamp=true ! videoconvert ! avenc_mjpeg name=encoder ! appsink name=sink Spice-Warning **: gstreamer-encoder.c:799:create_pipeline: GStreamer error: no element "avenc_mjpeg"



When running with "gstreamer:vp8;spice:mjpeg" I see the following spice-server warnings: ((null):17523): Spice-Debug **: gstreamer-encoder.c:795:create_pipeline: GStreamer pipeline: appsrc name=src format=2 do-timestamp=true ! videoconvert ! vp8enc name=encoder ! appsink name=sink ((null):17523): Spice-Debug **: stream.c:454:display_channel_create_stream: stream 49 511x20 (5, 703) (516, 723) 30 fps ((null):17523): Spice-Debug **: stream.c:333:before_reattach_stream: ignoring drop, same process_commands_generation as previous frame

and later
((null):17523): Spice-Debug **: gstreamer-encoder.c:1282:spice_gst_encoder_encode_frame: video format change: width 0 -> 516, height 0 -> 25, format 0 -> 8 ((null):17523): Spice-Warning **: gstreamer-encoder.c:726:map_format: The 8 format has not been tested yet ((null):17523): Spice-Debug **: gstreamer-encoder.c:862:set_gstenc_bitrate: setting the GStreamer target-bitrate to 0 ((null):17523): Spice-Debug **: gstreamer-encoder.c:939:configure_pipeline: setting state to PLAYING



Attaching with gdb: I see the following threads:
(gdb) info threads
  Id   Target Id         Frame
13 Thread 0x7f763d1bb700 (LWP 17524) "qemu-system-x86" 0x00007f76477cdc59 in syscall () from /lib64/libc.so.6 12 Thread 0x7f763b5bb700 (LWP 17531) "qemu-system-x86" 0x00007f7647aa1045 in do_futex_wait () from /lib64/libpthread.so.0 11 Thread 0x7f763aab7700 (LWP 17532) "qemu-system-x86" 0x00007f76477c9707 in ioctl () from /lib64/libc.so.6 10 Thread 0x7f7639dff700 (LWP 17533) "qemu-system-x86" 0x00007f76477cdc59 in syscall () from /lib64/libc.so.6 9 Thread 0x7f759ffff700 (LWP 17579) "src:src" 0x00007f76477cdc59 in syscall () from /lib64/libc.so.6 8 Thread 0x7f759f7fe700 (LWP 17580) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 7 Thread 0x7f759effd700 (LWP 17581) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 6 Thread 0x7f759e7fc700 (LWP 17582) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 5 Thread 0x7f759dffb700 (LWP 17583) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 4 Thread 0x7f759d7fa700 (LWP 17584) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 3 Thread 0x7f759cff9700 (LWP 17585) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 2 Thread 0x7f7597fff700 (LWP 17586) "src:src" 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0 * 1 Thread 0x7f764d78cbc0 (LWP 17523) "qemu-system-x86" 0x00007f76477c80a1 in ppoll () from /lib64/libc.so.6
(gdb) thread 8
[Switching to thread 8 (Thread 0x7f759f7fe700 (LWP 17580))]
#0 0x00007f7647aa0e57 in do_futex_wait.constprop () from /lib64/libpthread.so.0
(gdb) bt
#0 0x00007f7647aa0e57 in do_futex_wait.constprop () at /lib64/libpthread.so.0 #1 0x00007f7647aa0f04 in __new_sem_wait_slow.constprop.0 () at /lib64/libpthread.so.0
#2  0x00007f7647aa0faa in sem_wait@@GLIBC_2.2.5 () at /lib64/libpthread.so.0
#3  0x00007f75ac63ee41 in thread_encoding_proc () at /lib64/libvpx.so.2
#4  0x00007f7647a9960a in start_thread () at /lib64/libpthread.so.0
#5  0x00007f76477d3a4d in clone () at /lib64/libc.so.6
(gdb) detach



---

From 4a29ad1422971e10f560ef95a1646ffa4dbac7a4 Mon Sep 17 00:00:00 2001
From: Uri Lublin <uril@xxxxxxxxxx>
Date: Thu, 14 Jan 2016 17:23:08 +0200
Subject: [PATCH] spice: add video-codecs option

Starting with spice-0.12.7 some video codecs in addition
to mjpeg.

Signed-off-by: Uri Lublin <uril@xxxxxxxxxx>
---
 qemu-options.hx |  6 ++++++
 ui/spice-core.c | 22 ++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/qemu-options.hx b/qemu-options.hx
index 215d00d..70024ce 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1051,6 +1051,7 @@ DEF("spice", HAS_ARG, QEMU_OPTION_spice,
     "       [,streaming-video=[off|all|filter]][,disable-copy-paste]\n"
     "       [,disable-agent-file-xfer][,agent-mouse=[on|off]]\n"
     " [,playback-compression=[on|off]][,seamless-migration=[on|off]]\n"
+    "       [,video-codecs=list-of-codecs]\n"
     "   enable spice\n"
     "   at least one of {port, tls-port} is mandatory\n",
     QEMU_ARCH_ALL)
@@ -1142,6 +1143,11 @@ Enable/disable audio stream compression (using celt 0.5.1). Default is on.
 @item seamless-migration=[on|off]
 Enable/disable spice seamless migration. Default is off.

+@item video-codecs=list-of-codecs]
+Set spice video codecs. The list items are separated by semicolons (;)
+Current supported codecs are spice:mjpeg gstreamer:[mjpeg|v8|h264]
+Default is spice:mjpeg
+
 @end table
 ETEXI

diff --git a/ui/spice-core.c b/ui/spice-core.c
index 6a62d71..769d162 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -496,6 +496,9 @@ static QemuOptsList qemu_spice_opts = {
         }, {
             .name = "seamless-migration",
             .type = QEMU_OPT_BOOL,
+        }, {
+            .name = "video-codecs",
+            .type = QEMU_OPT_STRING,
         },
         { /* end of list */ }
     },
@@ -794,6 +797,25 @@ void qemu_spice_init(void)

     seamless_migration = qemu_opt_get_bool(opts, "seamless-migration", 0);
     spice_server_set_seamless_migration(spice_server, seamless_migration);
+
+    str = qemu_opt_get(opts, "video-codecs");
+ #if SPICE_SERVER_VERSION >= 0x000c07 /* 0.12.7 */
+    if (str) {
+        if (spice_server_set_video_codecs(spice_server, str)) {
+            error_report("spice: invalid video encoder %s", str);
+            exit(1);
+        }
+    } else {
+        spice_server_set_video_codecs(spice_server, "spice:mjpeg");
+    }
+#else
+    if (str) {
+        error_report("this qemu build does not support the "
+                     "\"video-codecs\" option");
+        exit(1);
+    }
+#endif
+
     if (spice_server_init(spice_server, &core_interface) != 0) {
         error_report("failed to initialize spice server");
         exit(1);
--
2.5.0


_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]