思路: 用浏览器的F12调试功能,找到定义文章标题字体属性的class,如在写这篇文章时,本网站主题定义标题字体的class为entry-title 登录到服务器,cd到主题文件目录下,运行命令grep entry-title...
Continue reading...Adin
GStreamer学习笔记 – GStreamer实现ogg 格式音频播放及代码解析
源代码出处: https://gstreamer.freedesktop.org/documentation/application-development/basics/helloworld.html?gi-language=c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include <gst/gst.h> #include <glib.h> static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data) { GMainLoop *loop = (GMainLoop *) data; switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_EOS: g_print ("End of stream\n"); g_main_loop_quit (loop); break; case GST_MESSAGE_ERROR: { gchar *debug; GError *error; gst_message_parse_error (msg, &error, &debug); g_free (debug); g_printerr ("Error: %s\n", error->message); g_error_free (error); g_main_loop_quit (loop); break; } default: break; } return TRUE; } static void on_pad_added (GstElement *element, GstPad *pad, gpointer data) { GstPad *sinkpad; GstElement *decoder = (GstElement *) data; /* We can now link this pad with the vorbis-decoder sink pad */ g_print ("Dynamic pad created, linking demuxer/decoder\n"); sinkpad = gst_element_get_static_pad (decoder, "sink"); gst_pad_link (pad, sinkpad); gst_object_unref (sinkpad); } int main (int argc, char *argv[]) { GMainLoop *loop; GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink; GstBus *bus; guint bus_watch_id; /* Initialisation */ gst_init (&argc, &argv); loop = g_main_loop_new (NULL, FALSE); /* Check input arguments */ if (argc != 2) { g_printerr ("Usage: %s <Ogg/Vorbis filename>\n", argv[0]); return -1; } /* Create gstreamer elements */ pipeline = gst_pipeline_new ("audio-player"); source = gst_element_factory_make ("filesrc", "file-source"); //用于连接文件 demuxer = gst_element_factory_make ("oggdemux", "ogg-demuxer"); //分离器 decoder = gst_element_factory_make ("vorbisdec", "vorbis-decoder"); //解码器 conv = gst_element_factory_make ("audioconvert", "converter"); //转换器 sink = gst_element_factory_make ("autoaudiosink", "audio-output"); //接收器 if (!pipeline || !source || !demuxer || !decoder || !conv || !sink) { g_printerr ("One element could not be created. Exiting.\n"); return -1; } /* Set up the pipeline */ /* we set the input filename to the source element */ g_object_set (G_OBJECT (source), "location", argv[1], NULL); /* we add a message handler */ bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); bus_watch_id = gst_bus_add_watch (bus, bus_call, loop); gst_object_unref (bus); /* we add all elements into the pipeline */ /* file-source | ogg-demuxer | vorbis-decoder | converter | alsa-output */ gst_bin_add_many (GST_BIN (pipeline), source, demuxer, decoder, conv, sink, NULL); /* we link the elements together */ /* file-source -> ogg-demuxer ~> vorbis-decoder -> converter -> alsa-output */ gst_element_link (source, demuxer); gst_element_link_many (decoder, conv, sink, NULL); g_signal_connect (demuxer, "pad-added", G_CALLBACK (on_pad_added), decoder); /* note that the demuxer will be linked to the decoder dynamically. The reason is that Ogg may contain various streams (for example audio and video). The source pad(s) will be created at run time, by the demuxer when it detects the amount and nature of streams. Therefore we connect a callback function which will be executed when the "pad-added" is emitted.*/ /* Set the pipeline to "playing" state*/ g_print ("Now playing: %s\n", argv[1]); gst_element_set_state (pipeline, GST_STATE_PLAYING); /* Iterate */ g_print ("Running...\n"); g_main_loop_run (loop); /* Out of the main loop, clean up nicely */ g_print ("Returned, stopping playback\n"); gst_element_set_state (pipeline, GST_STATE_NULL); g_print ("Deleting pipeline\n"); gst_object_unref (GST_OBJECT (pipeline)); g_source_remove (bus_watch_id); g_main_loop_unref (loop); return 0; } |
编译 gcc -Wall helloworld.c -o helloworld $(pkg-config --cflags --libs gstreamer-1.0),运行...
Continue reading...Dropbox一直在下载或者上传文件
Dropbox同步文件时出现了有几个文件一直处在下载状态,一开始以为是Dropbox的Bug,后来意识到可能是哪些文件出了什么问题,于是先备份了整个同步文件夹,再在Dropbox设置里关闭了所有文件的同步,这个操作会自动删除掉本地文件。 但是,执行此操作后剩下了几个文件无法删除,看图标有个锁,发现应该是Dropbox没有权限读写导致的,手工删除后,将备份文件中与刚对应的几个文件的权限用chmod和chown修改一下,再在Dropbox里重新开启各文件夹的同步性,等生成了同步文件夹后将备份文件夹覆写过去即可。
Continue reading...Unable to install module xxx kernel xxx: Missing kernel modules tree.
原因一:没有安装linux-headers或者linux-lts-headers
1 2 3 |
pacman -S linux-headers linux-lts-headers |
原因二:安装的内核和headers版本不匹配 如果是版本降级,可以到/var/cache/pacman/pkg...
Continue reading...database ‘xxx’ is not valid (invalid or corrupted database (PGP signature))
其中一个原因是系统的某个更新改写了/etc/pacman.conf 使SigLevel变成了TrustedOnly,找到它改成TrustAll. 然后执行:
1 2 3 |
pacman -Syy |
...
Continue reading...Vim获取特定行作为字符串复制给变量
let headTxt=getline(1) 获取第一行赋值给字符串headTxt
1 2 3 4 5 6 7 8 9 10 11 |
if &filetype == "c" let headTxt=getline(1) if headTxt == "#include <gtk/gtk.h>" exec "!gcc `pkg-config --cflags --libs gtk+-3.0` % -o %<" exec "!./%<" else exec "!gcc % -o %< -lm -lreadline" exec "!./%<" endif |
...
Continue reading...