1. 程式人生 > >ubuntu下 gstreamer 的配置及播放音視訊例子

ubuntu下 gstreamer 的配置及播放音視訊例子

Gstreamer安裝:

使用sudo apt-get install 安裝

sudo apt-get install libgstreamer0.10-dev gstreamer-tools gstreamer0.10-tools gstreamer0.10-doc
sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse


安裝瞭如下的gst的外掛:

gstreamer0.10-tools

gstreamer0.10-x

gstreamer0.10-plugins-base

gstreamer0.10-plugins-good

gstreamer0.10-plugins-ugly

gstreamer0.10-plugins-bad

gstreamer0.10-ffmpeg

gstreamer0.10-alsa

gstreamer0.10-schroedinger

gstreamer0.10-pulseaudio


有可能需要安裝的軟體:

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install zlib1g


mad解碼外掛

apt-get install libmad0-dev

apt-get install gstreamer0.10-plugins-ugly

Initializing GStreamer

#include <stdio.h>
#include <gst/gst.h>

int main (int   argc,   char *argv[])
{
  const gchar *nano_str;
  guint major, minor, micro, nano;

  gst_init (&argc, &argv);

  gst_version (&major, &minor, µ, &nano);

  if (nano == 1)
    nano_str = "(CVS)";
  else if (nano == 2)
    nano_str = "(Prerelease)";
  else
    nano_str = "";

  printf ("This program is linked against GStreamer %d.%d.%d %s\n",
          major, minor, micro, nano_str);

  return 0;
}

#include <gst/gst.h>
#include <glib.h>
//定義訊息處理函式,
static gboolean bus_call(GstBus *bus,GstMessage *msg,gpointer data)
{
    GMainLoop *loop = (GMainLoop *) data;//這個是主迴圈的指標,在接受EOS訊息時退出迴圈
    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;
}

int main(int argc,char *argv[])
{
    GMainLoop *loop;
    GstElement *pipeline,*source,*decoder,*sink;//定義元件
    GstBus *bus;

    gst_init(&argc,&argv);
    loop = g_main_loop_new(NULL,FALSE);//建立主迴圈,在執行 g_main_loop_run後正式開始迴圈

    if(argc != 2)
    {
        g_printerr("Usage:%s <mp3 filename>\n",argv[0]);
        return -1;
    }
    //建立管道和元件
    pipeline = gst_pipeline_new("audio-player");
    source = gst_element_factory_make("filesrc","file-source");
    decoder = gst_element_factory_make("mad","mad-decoder");
    sink = gst_element_factory_make("autoaudiosink","audio-output");

    if(!pipeline||!source||!decoder||!sink){
        g_printerr("One element could not be created.Exiting.\n");
        return -1;
    }
    //設定 source的location 引數。即 檔案地址.
    g_object_set(G_OBJECT(source),"location",argv[1],NULL);
    //得到 管道的訊息匯流排
    bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
   //新增訊息監視器
    gst_bus_add_watch(bus,bus_call,loop);
    gst_object_unref(bus);
    //把元件新增到管道中.管道是一個特殊的元件,可以更好的讓資料流動
    gst_bin_add_many(GST_BIN(pipeline),source,decoder,sink,NULL);
   //依次連線元件
   gst_element_link_many(source,decoder,sink,NULL);
   //開始播放
    gst_element_set_state(pipeline,GST_STATE_PLAYING);
    g_print("Running\n");
    //開始迴圈
    g_main_loop_run(loop);
    g_print("Returned,stopping playback\n");
    gst_element_set_state(pipeline,GST_STATE_NULL);
    gst_object_unref(GST_OBJECT(pipeline));
    return 0;
}

編譯執行

gcc -Wall test2.c -o test2  $(pkg-config --cflags --libs gstreamer-0.10)
(注意!!!很多地方寫的這條命令 :gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) -g test2.c -o test2 ,根本編譯不過!)

編譯時藉助了 pkg-config 
pkg-config --cflags --libs gstreamer-0.10 會把gstreamer-0.10編譯所依賴的庫的路徑 標頭檔案的路徑全部幫你找出來,不用你再依次寫出。
(上面這條pkg-config --cflags --libs gstreamer-0.10 就相當於:
-pthread -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/gstreamer-0.10 -I/usr/include/libxml2  -pthread -L/usr/lib/i386-linux-gnu -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0)

./test2  ./abc.mp3

播放視訊:

Ubuntu 12.04
gst-launch-0.10 filesrc location=/tmp/video_stream_pipe ! decodebin ! ffmpegcolorspace ! videoscale ! ximagesink sync=false
Ubuntu 13.10
gst-launch-1.0 filesrc location=/tmp/video_stream_pipe ! decodebin ! videoconvert ! xvimagesink sync=false
gst-launch-1.0 filesrc location=/tmp/video_stream_pipe ! decodebin ! videoconvert ! ximagesink sync=false

gst-launch-0.10(1) - Linux man page

Name

gst-launch - build and run a GStreamer pipeline

Synopsis

gst-launch [OPTION...] PIPELINE-DESCRIPTION

Description

gst-launch is a tool that builds and runs basicGStreamer pipelines.

In simple form, a PIPELINE-DESCRIPTION is a list of elements separated by exclamation marks (!). Properties may be appended to elements, in the formproperty=value.

For a complete description of possible PIPELINE-DESCRIPTIONS see the section pipeline descriptionbelow or consult the GStreamer documentation.

Please note that gst-launch is primarily a debugging tool for developers and users. You should not build applications on top of it. For applications, use the gst_parse_launch() function of the GStreamer API as an easy way to construct pipelines from pipeline descriptions.

Options

gst-launch accepts the following options:

--help

Print help synopsis and available FLAGS

-v, --verboseOutput status information and property notifications-q, --quietDo not print any progress information-m, --messagesOutput messages posted on the pipeline's bus-t, --tagsOutput tags (also known as metadata)-o FILE, --output=FILESave XML representation of pipeline to FILE and exit-f, --no_faultDo not install a fault handler-T, --tracePrint memory allocation traces. The feature must be enabled at compile time to work.

Gstreamer Options

gst-launch also accepts the following options that are common to all GStreamer applications:

--gst-version
Prints the version string of the GStreamer core library.
--gst-fatal-warnings
Causes GStreamer to abort if a warning message occurs. This is equivalent to setting the environment variable G_DEBUG to 'fatal_warnings' (see the section environment variables below for further information).
--gst-debug=STRING
A comma separated list of category_name:level pairs to specify debugging levels for each category. Level is in the range 0-5 where 0 will show no messages, and 5 will show all messages. The wildcard * can be used to match category names.

Use --gst-debug-help to show category names

Example: GST_CAT:5,GST_ELEMENT_*:3,oggdemux:5

--gst-debug-level=LEVEL
Sets the threshold for printing debugging messages. A higher level will print more messages. The useful range is 0-5, with the default being 0.
--gst-debug-no-color
GStreamer normally prints debugging messages so that the messages are color-coded when printed to a terminal that handles ANSI escape sequences. Using this option causes GStreamer to print messages without color. Setting theGST_DEBUG_NO_COLOR environment variable will achieve the same thing.
--gst-debug-disable
Disables debugging.
--gst-debug-help
Prints a list of available debug categories and their default debugging level.
--gst-plugin-spew
GStreamer info flags to set Enable printout of errors while loading GStreamer plugins
--gst-plugin-path=PATH
Add directories separated with ':' to the plugin search path
--gst-plugin-load=PLUGINS
Preload plugins specified in a comma-separated list. Another way to specify plugins to preload is to use the environment variable GST_PLUGIN_PATH

Pipeline Description

A pipeline consists elements and linksElements can be put into bins of different sorts. Elementslinks and bins can be specified in a pipeline description in any order.

Elements

ELEMENTTYPE [PROPERTY1 ...]

Creates an element of type ELEMENTTYPE and sets the PROPERTIES.

Properties

PROPERTY=VALUE ...

Sets the property to the specified value. You can use gst-inspect(1) to find out about properties and allowed values of different elements.
Enumeration properties can be set by name, nick or value.

Bins

[BINTYPE.] ( [PROPERTY1 ...] PIPELINE-DESCRIPTION )

Specifies that a bin of type BINTYPE is created and the given properties are set. Every element between the braces is put into the bin. Please note the dot that has to be used after the BINTYPE. You will almost never need this functionality, it is only really useful for applications using the gst_launch_parse() API with 'bin' as bintype. That way it is possible to build partial pipelines instead of a full-fledged top-level pipeline.

Links

[[SRCELEMENT].[PAD1,...]] ! [[SINKELEMENT].[PAD1,...]] [[SRCELEMENT].[PAD1,...]] ! CAPS ! [[SINKELEMENT].[PAD1,...]]

Links the element with name SRCELEMENT to the element with name SINKELEMENT, using the caps specified in CAPS as a filter. Names can be set on elements with the name property. If the name is omitted, the element that was specified directly in front of or after the link is used. This works across bins. If a padname is given, the link is done with these pads. If no pad names are given all possibilities are tried and a matching pad is used. If multiple padnames are given, both sides must have the same number of pads specified and multiple links are done in the given order.
So the simplest link is a simple exclamation mark, that links the element to the left of it to the element right of it.

Caps

MIMETYPE [, PROPERTY[, PROPERTY ...]]] [; CAPS[; CAPS ...]]

Creates a capability with the given mimetype and optionally with given properties. The mimetype can be escaped using " or '. If you want to chain caps, you can add more caps in the same format afterwards.

Properties

NAME=[(TYPE)]VALUE
in lists and ranges: [(TYPE)]VALUE

Sets the requested property in capabilities. The name is an alphanumeric value and the type can have the following case-insensitive values:
i or int for integer values or ranges
f or float for float values or ranges
4 or fourcc for FOURCC values
bbool or boolean for boolean values
sstr or string for strings
fraction for fractions (framerate, pixel-aspect-ratio)
l or list for lists
If no type was given, the following order is tried: integer, float, boolean, string.
Integer values must be parsable by strtol(), floats by strtod(). FOURCC values may either be integers or strings. Boolean values are (case insensitive) yesnotrue or false and may like strings be escaped with " or '.
Ranges are in this format: [ VALUE, VALUE ]
Lists use this format: ( VALUE [, VALUE ...] )

Pipeline Control

A pipeline can be controlled by signals. SIGUSR2 will stop the pipeline (GST_STATE_NULL); SIGUSR1 will put it back to play (GST_STATE_PLAYING). By default, the pipeline will start in the playing state.
There are currently no signals defined to go into the ready or pause (GST_STATE_READY and GST_STATE_PAUSED) state explicitely.

Pipeline Examples

The examples below assume that you have the correct plug-ins available. In general, "osssink" can be substituted with another audio output plug-in such as "esdsink", "alsasink", "osxaudiosink", or "artsdsink". Likewise, "xvimagesink" can be substituted with "ximagesink", "sdlvideosink", "osxvideosink", or "aasink". Keep in mind though that different sinks might accept different formats and even the same sink might accept different formats on different machines, so you might need to add converter elements like audioconvert and audioresample (for audio) or ffmpegcolorspace (for video) in front of the sink to make things work.

Audio playback

gst-launch filesrc location=music.mp3 ! mad ! audioconvert ! audioresample ! osssink
Play the mp3 music file "music.mp3" using a libmad-based plug-in and output to an OSS device

gst-launch filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! osssink
Play an Ogg Vorbis format file

gst-launch gnomevfssrc location=music.mp3 ! mad ! osssink
gst-launch gnomevfssrc location=http://domain.com/music.mp3 ! mad ! audioconvert ! audioresample ! osssink

Play an mp3 file or an http stream using GNOME-VFS

gst-launch gnomevfssrc location=smb://computer/music.mp3 ! mad ! audioconvert ! audioresample ! osssink
Use GNOME-VFS to play an mp3 file located on an SMB server

Format conversion

gst-launch filesrc location=music.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=music.ogg
Convert an mp3 music file to an Ogg Vorbis file

gst-launch filesrc location=music.mp3 ! mad ! audioconvert ! flacenc ! filesink location=test.flac
Convert to the FLAC format

Other

gst-launch filesrc location=music.wav ! wavparse ! audioconvert ! audioresample ! osssink
Plays a .WAV file that contains raw audio data (PCM).

gst-launch filesrc location=music.wav ! wavparse ! audioconvert ! vorbisenc ! oggmux ! filesink location=music.ogg
gst-launch filesrc location=music.wav ! wavparse ! audioconvert ! lame ! filesink location=music.mp3

Convert a .WAV file containing raw audio data into an Ogg Vorbis or mp3 file

gst-launch cdparanoiasrc mode=continuous ! audioconvert ! lame ! id3v2mux ! filesink location=cd.mp3
rips all tracks from compact disc and convert them into a single mp3 file

gst-launch cdparanoiasrc track=5 ! audioconvert ! lame ! id3v2mux ! filesink location=track5.mp3
rips track 5 from the CD and converts it into a single mp3 file

Using gst-inspect(1), it is possible to discover settings like the above for cdparanoiasrc that will tell it to rip the entire cd or only tracks of it. Alternatively, you can use an URI and gst-launch-0.10 will find an element (such as cdparanoia) that supports that protocol for you, e.g.: gst-launch cdda://5 ! lame vbr=new vbr-quality=6 ! filesink location=track5.mp3

gst-launch osssrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=input.ogg
records sound from your audio input and encodes it into an ogg file

Video

gst-launch filesrc location=JB_FF9_TheGravityOfLove.mpg ! dvddemux ! mpeg2dec ! xvimagesink
Display only the video portion of an MPEG-1 video file, outputting to an X display window

gst-launch filesrc location=/flflfj.vob ! dvddemux ! mpeg2dec ! sdlvideosink
Display the video portion of a .vob file (used on DVDs), outputting to an SDL window

gst-launch filesrc location=movie.mpg ! dvddemux name=demuxer demuxer. ! queue ! mpeg2dec ! sdlvideosink demuxer. ! queue ! mad ! audioconvert ! audioresample ! osssink
Play both video and audio portions of an MPEG movie

gst-launch filesrc location=movie.mpg ! mpegdemux name=demuxer demuxer. ! queue ! mpeg2dec ! ffmpegcolorspace ! sdlvideosink demuxer. ! queue ! mad ! audioconvert ! audioresample ! osssink
Play an AVI movie with an external text subtitle stream

This example also shows how to refer to specific pads by name if an element (here: textoverlay) has multiple sink or source pads.

gst-launch textoverlay name=overlay ! ffmpegcolorspace ! videoscale ! autovideosink filesrc location=movie.avi ! decodebin2 ! ffmpegcolorspace ! overlay.video_sink filesrc location=movie.srt ! subparse ! overlay.text_sink

Play an AVI movie with an external text subtitle stream using playbin2

gst-launch playbin2 uri=file:///path/to/movie.avi suburi=file:///path/to/movie.srt

Network streaming

Stream video using RTP and network elements.

gst-launch v4l2src ! video/x-raw-yuv,width=128,height=96,format='(fourcc)'UYVY ! ffmpegcolorspace ! ffenc_h263 ! video/x-h263 ! rtph263ppay pt=96 ! udpsink host=192.168.1.1 port=5000 sync=false
Use this command on the receiver

gst-launch udpsrc port=5000 ! application/x-rtp, clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 ! xvimagesink
This command would be run on the transmitter

Diagnostic

gst-launch -v fakesrc num-buffers=16 ! fakesink
Generate a null stream and ignore it (and print out details).

gst-launch audiotestsrc ! audioconvert ! audioresample ! osssink
Generate a pure sine tone to test the audio output

gst-launch videotestsrc ! xvimagesink
gst-launch videotestsrc ! ximagesink

Generate a familiar test pattern to test the video output

Automatic linking

You can use the decodebin element to automatically select the right elements to get a working pipeline.

gst-launch filesrc location=musicfile ! decodebin ! audioconvert ! audioresample ! osssink
Play any supported audio format

gst-launch filesrc location=videofile ! decodebin name=decoder decoder. ! queue ! audioconvert ! audioresample ! osssink decoder. ! ffmpegcolorspace ! xvimagesink
Play any supported video format with video and audio output. Threads are used automatically. To make this even easier, you can use the playbin element:

gst-launch playbin uri=file:///home/joe/foo.avi

Filtered connections

These examples show you how to use filtered caps.

gst-launch videotestsrc ! 'video/x-raw-yuv,format=(fourcc)YUY2;video/x-raw-yuv,format=(fourcc)YV12' ! xvimagesink
Show a test image and use the YUY2 or YV12 video format for this.

gst-launch osssrc ! 'audio/x-raw-int,rate=[32000,64000],width=[16,32],depth={16,24,32},signed=(boolean)true' ! wavenc ! filesink location=recording.wav
record audio and write it to a .wav file. Force usage of signed 16 to 32 bit samples and a sample rate between 32kHz and 64KHz.

Environment Variables

GST_DEBUG

Comma-separated list of debug categories and levels, e.g. GST_DEBUG=totem:4,typefind:5
GST_DEBUG_NO_COLOR
When this environment variable is set, coloured debug output is disabled.
GST_DEBUG_DUMP_DOT_DIR
When set to a filesystem path, store dot files of pipeline graphs there.
GST_REGISTRY
Path of the plugin registry file. Default is ~/.gstreamer-0.10/registry-CPU.xml where CPU is the machine/cpu type GStreamer was compiled for, e.g. 'i486', 'i686', 'x86-64', 'ppc', etc. (check the output of "uname -i" and "uname -m" for details).
GST_REGISTRY_UPDATE
Set to "no" to force GStreamer to assume that no plugins have changed, been added or been removed. This will make GStreamer skip the initial check whether a rebuild of the registry cache is required or not. This may be useful in embedded environments where the installed plugins never change. Do not use this option in any other setup.
GST_PLUGIN_PATH
Specifies a list of directories to scan for additional plugins. These take precedence over the system plugins.
GST_PLUGIN_SYSTEM_PATH
Specifies a list of plugins that are always loaded by default. If not set, this defaults to the system-installed path, and the plugins installed in the user's home directory
OIL_CPU_FLAGS
Useful liboil environment variable. Set OIL_CPU_FLAGS=0 when valgrind or other debugging tools trip over liboil's CPU detection (quite a few important GStreamer plugins like videotestsrc, audioconvert or audioresample use liboil).
G_DEBUG
Useful GLib environment variable. Set G_DEBUG=fatal_warnings to make GStreamer programs abort when a critical warning such as an assertion failure occurs. This is useful if you want to find out which part of the code caused that warning to be triggered and under what circumstances. Simply set G_DEBUG as mentioned above and run the program in gdb (or let it core dump). Then get a stack trace in the usual way.

Files

~/.gstreamer-0.10/registry-*.xml

The xml plugin database; can be deleted at any time, will be re-created automatically when it does not exist yet or plugins change.

相關推薦

ubuntu gstreamer配置播放視訊例子

Gstreamer安裝: 使用sudo apt-get install 安裝 sudo apt-get install libgstreamer0.10-dev gstreamer-tools gstreamer0.10-tools gstreamer0.10-

ubuntu網路配置IP修改

以下內容為原創,歡迎轉載,轉載請說明來源:https://blog.csdn.net/masterbee/article/details/80253820 當安裝完成ubuntu或其它類似的linux系統後,為了連線上網,一般還需要配置網路IP等操作。 簡單步驟如下: 1、首先先檢視PCI

ubuntuPycharm安裝配置

字體大小 creat 配置 註冊 字體 spa tar.gz mark 註冊碼 1.從http://www.jetbrains.com/pycharm/download/下載最新的Pycharm tar xfz pycharm-*.tar.gz,將Pycharm文件夾解壓到

ubuntu rabbitMQ安裝配置遠端訪問web管理介面

#1 更新 apt-get update apt-get upgrade #2 安裝Erlang wget http://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc apt-key add erla

ubuntu 安裝memcached配置遠端訪問

官網地址 wget 下載 wget http://memcached.org/files/memcached-1.5.9.tar.gz 解壓 tar -zxvf memcached-1.

ubuntu安裝eclipse配置使用c/c++

ubuntu下安裝eclipse 安裝eclipse及jdk包 配置在eclipse上使用c++ 目錄 安裝eclipse 1.下載jdk 2.下載eclipse 3.將jdk解壓 到 /opt/jvm/資

Ubuntu安裝MySQL簡單操作

base lms vsp pic splay mysql- != nbsp tar Ubuntu上安裝MySQL非常簡單只需要幾條命令就可以完成。 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-c

ubuntu安裝mysql卸載mysql方法

查看 ati 用戶名 google mysql-cli entos googl 通過 oot 首先: 別的系統下可能是 sudo apt-get install libaio 但在 Ubuntu Kylin 下 需要 sudo apt-get install liba

Ubuntu安裝配置redis

命令 rep -c col 安裝配置 pan 令行 .html cli 安裝redis apt-get install redis-server 查看是否啟動 ps -aux|grep redis 客戶端連接   註:     安裝Redis服務器,會自動地一起安裝

ubuntuIDEA配置tomcat報錯Warning the selected directory is not a valid tomcat home

warn 技術 span 更改 文件目錄 tor 選擇 spa .com 產生這個問題的主要原因是文件夾權限問題。 可以修改文件夾權限或者更改tomcat文件目錄所有者。 這裏我直接變更tomcat文件夾所有者: sudo chown -R skh:skh tomcat-

ubuntu安裝Teamviewer使用

這兩天一直在折騰Teamviewer的安裝,一路遇到了不少坑,特此整理記錄吧。 一、Windows和Ubuntu環境下安裝Teamviewer 我們常用的功能是Windows下遠端控制Ubuntu,此時兩個環境下的Teamviewer版本要保證一致,否則一方會提示另

ubuntuQt配置qwt和libmodbus

Qt安裝在ubuntu上出了很多問題,其中一個就是qmake不能用。 解決方法:進入/usr/lib/x86_64-linux-gnu/qt-default/qtchooser目錄,對目錄下的default.conf修改為 /home/mlw/Qt5.7.0/5.7/gcc_64/bin /

【GitHub】 初學Git,Github在Ubuntu配置

1.參考連結:https://blog.csdn.net/tina_ttl/article/details/51326684 http://www.runoob.com/w3cnote/git-guide.html 開始使用github 1. 配置git git config --g

ubuntu安裝curl報錯處理

1)安裝curl 1.1  下載安裝包 wget https://curl.haxx.se/download/curl-7.55.1.tar.gz 1.2 解壓 tar -xzvf curl-7.55.1.tar.gz 1.3 安裝 cd curl-

Ubuntu搭建Nginx伺服器+整合RTMP視訊直播流處理(邊做邊做更新)

簡介: 要求:做一個網頁獲取攝像頭的視訊流,然後將視訊流經過流伺服器推送到後臺視訊處理伺服器,再由後臺視訊處理伺服器推送到流伺服器,最終推送到頁面。如圖: 經過查閱資料,目前有red5以及nginx+nginx-rtmp-module實現,選擇第二種方式來實現。 準備工作:

IntelliJ IDEASVN配置使用詳解

 第一步、安裝SVN客戶端     下載並安裝TortoiseSVN,我安裝的版本是1.8。整個過程一路next即可。但是要注意下圖所示的command line client tools一定要勾選上。 安裝完SVN客戶端後進入IDAE的settings進行設定,如圖

Android FFmpeg系列——4 子執行緒播放視訊

利用工作閒餘時間,終於實現在子執行緒播放音視訊! 上一接學習了在 C 使用多執行緒,接著就是利用 C 多執行緒同時播放音視訊(暫時還不同步)。 不多說,直接上碼。 程式碼 // C 層播放器結構體 typedef struct _Player { //

Opencv 2.4.9在Ubuntu配置與安裝

一、依賴包安裝        1.  build-essential 軟體包,為編譯程式提供必需軟體包的列表資訊,這樣軟體包才知道標頭檔案、庫函式在哪裡。還會下載依賴的軟體包,安裝gcc/g++/gdb/make 等基本程式設計工具,最後才組成一個開發環境。 sudo a

Ubuntu 18.04配置美化

首先更新一下 sudo apt update && sudo apt upgrade 一 基礎軟體安裝 office 如果需要將預設的libreoffice替換為WPS可以參考16.04的操作。 中文輸入法 安裝搜狗輸

ubuntu如何配置靜態ip

前些天在xubuntu 18.04 desktop上設定了下靜態IP,發現與centos/linux中區別極大。 1、首先檢視網絡卡名 $ ip a / ifconfig 2、 cp一份yaml檔案,改個名字 $ sudo cp /etc/netplan/*.yaml /etc/