詳細的教學文件
首先嘗試編譯Gstreamer所提共的19個範例
1.下載Gstreamer的安裝檔,共兩個檔案(下載位置),選擇自己要的版本。
gstreamer-1.0-x86_64-1.10.2
gstreamer-1.0-devel-x86_64-1.10.2
皆選擇完整安裝即可。
2.下載Gstreamer的範例檔(下載位置)
下載回來後可以在 gst-docs\examples\tutorials\vs2010 找到"tutorials.sln"。
為了避免改到範例的內容,建議將tutorials資料夾複製到自己想要的位置。
3.用 VS2015 打開"tutorials.sln",選擇 "建置->建置方案",官網上說明應該19個範例都可以編譯成功,但我只成功了14個。檢查code後發現都是缺少某些Win32檔案造成,想嘗試的人或許可以試著用x86的版本試試看。
每個範例的說明網站(Eng),中文。
2016年12月6日 星期二
2016年9月20日 星期二
centOS無法識別1280x960 解析度的解決方法
在 terminal 中使用cvt生成modeline信息(可以用#cvt -h查看cvt詳細訊息)
#cvt -v 1280 960
terminal 顯示訊息如下:
Modeline "1280x960_60.00" 101.25 1280 1360 1488 1696 960 963 967 996 -hsync +vsync
去掉 modeline 後,接著透過 xrandr 設定解析度
#xrandr --newmode "1280x960_60.00" 101.25 1280 1360 1488 1696 960 963 967 996 -hsync +vsync
#xrandr --addmode VGA1 "1280x960_60.00"
#xrandr --output VGA1 --mode "1280x960_60.00"
搞定~
#cvt -v 1280 960
terminal 顯示訊息如下:
Modeline "1280x960_60.00" 101.25 1280 1360 1488 1696 960 963 967 996 -hsync +vsync
去掉 modeline 後,接著透過 xrandr 設定解析度
#xrandr --newmode "1280x960_60.00" 101.25 1280 1360 1488 1696 960 963 967 996 -hsync +vsync
#xrandr --addmode VGA1 "1280x960_60.00"
#xrandr --output VGA1 --mode "1280x960_60.00"
搞定~
2016年8月11日 星期四
install Mono on ubuntu
install Mono on ubuntu
ref:
http://www.mono-project.com/docs/getting-started/install/linux/#debian-ubuntu-and-derivatives
http://alvin1016.blogspot.tw/2015/03/ubuntunetmono.html
========================================================================
sudo apt-get install mono-complete
sudo apt-get install mono-runtime
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
# sudo apt-get update
get Error :
GPG error: http://hyperrate.com eliu Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5C577D59835AB0E3
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 5C577D59835AB0E3
try again
# sudo apt-get update
# echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list
# sudo apt-get install mono-devel mono-complete referenceassemblies-pcl
using System;
public class HelloWorld
{
static public void Main ()
{
Console.WriteLine (" Mono Mono ");
}
}
compile
# mcs hello.cs
Run hello.exe
# mono hello.exe
YO~~~~~~~ it's working ~~~~~
ref:
http://www.mono-project.com/docs/getting-started/install/linux/#debian-ubuntu-and-derivatives
http://alvin1016.blogspot.tw/2015/03/ubuntunetmono.html
========================================================================
sudo apt-get install mono-complete
sudo apt-get install mono-runtime
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
# sudo apt-get update
get Error :
GPG error: http://hyperrate.com eliu Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5C577D59835AB0E3
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 5C577D59835AB0E3
try again
# sudo apt-get update
# echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list
# sudo apt-get install mono-devel mono-complete referenceassemblies-pcl
=======================================================================
testing mono (hello.cs)using System;
public class HelloWorld
{
static public void Main ()
{
Console.WriteLine (" Mono Mono ");
}
}
compile
# mcs hello.cs
Run hello.exe
# mono hello.exe
YO~~~~~~~ it's working ~~~~~
2016年7月5日 星期二
CentOS 變更開機順序
因為安裝雙系統的關係,所以,開機選單是由 Linux 的 Grub 來控管。
1.編輯Grub檔案決定開機順序(需要root權限)
sudo vim /boot/grub/grub.conf裡面最關鍵的兩行
default=0(預設的開機選項)
timeout=5(開機選單到數的秒數,在這裡設定為5秒)
至於 "default=0" 所代表的意思為設定第0個選項為預設開機選項。
舉例來說,進到 grub.conf 檔案後可以看到
title CentOS (xxxxx)
title windows (xxxxx)
title other (xxxxx)
其中 "CentOS"就是第0項,windows為第1項,以此類推
2016年5月15日 星期日
socket 筆記
以下詳細解釋來自 XYZ的筆記本 大大,自己另外做的筆記。
1.在 Windows 使用 Socket 需要 link Winsock Library。[server端] [client端]
在程式中加入
#pragma comment(lib, "wsock32.lib") 或 #pragma comment(lib, "Ws2_32.lib")
wsock32.lib 和 Ws2_32.lib 的區別:
函式:int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
int sockfd:socket() 函式回傳的 socket descriptor
struct sockaddr *my_addr:用來通訊的位址資料(IP、PORT)
int addrlen:位址長度 ,sizeof(my_addr)
綁定成功回傳 0,失敗回傳 SOCKET_ERROR。可善用 " SOCKET_ERROR " 來檢查是否成功。
1.在 Windows 使用 Socket 需要 link Winsock Library。[server端] [client端]
在程式中加入
#pragma comment(lib, "wsock32.lib") 或 #pragma comment(lib, "Ws2_32.lib")
wsock32.lib 和 Ws2_32.lib 的區別:
- wsock32.lib 是較舊的 1.1 版本,Ws2_32.lib 是較新的 2.0 版本。
- wsock32.lib 跟 winsock.h 一起使用,Ws2_32.lib 跟 WinSock2.h 一起使用。
- winsock.h 和 WinSock2.h 不能同時使用,WinSock2.h 是用來取代 winsock.h,而不是擴展 winsock.h。
2.建立 socket descriptor。[server端] [client端]
函式:SOCKET socket( int af, int type, int protocol);
int af:使用何種通訊。
函式:SOCKET socket( int af, int type, int protocol);
int af:使用何種通訊。
- 例如
AF_INET:使用 IPv4
AF_INET6:使用 IPv6
- 能用的值跟 " int af " 參數有關
- 例如
SOCK_STREAM:使用 TCP 協議
SOCK_DGRAM:使用 UDP 協議
- 例如
IPPROTO_TCP:使用 TCP
IPPROTO_UDP:使用 UDP
3.設定位址資訊的資料 (SOCKADDR_IN)。[server端] [client端]
結構:使用 IP4 格式結構 struct sockaddr_in (in 表示 internet) 設定 internet 位址資訊。
結構:使用 IP4 格式結構 struct sockaddr_in (in 表示 internet) 設定 internet 位址資訊。
- struct sockaddr_in:IPv4 使用
- struct sockaddr_in6:IPv6 使用
- struct sockaddr:通用格式
- struct sockaddr_un:UNIX domain 格式
函式:int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
int sockfd:socket() 函式回傳的 socket descriptor
struct sockaddr *my_addr:用來通訊的位址資料(IP、PORT)
int addrlen:位址長度 ,sizeof(my_addr)
綁定成功回傳 0,失敗回傳 SOCKET_ERROR。可善用 " SOCKET_ERROR " 來檢查是否成功。
5.監聽連線 (listen)。[server端] 函式:int listen(SOCKET s, int backlog)
- SOCKET s:socket() 函式回傳的 socket descriptor。
- int backlog:最大可監聽多少連線(佇列、排隊)。設定 SOMAXCONN 表示系統最大值。
- 成功回傳 0,失敗回傳 SOCKET_ERROR。
- connection-oriented ( SOCK_STREAM ) 的 server 程式端程式才使用。
6.連線到 socket Server。[client端]
函式:int connect(SOCKET s, const struct sockaddr *name, int namelen)
- SOCKET s:socket() 函式回傳的 socket descriptor。
- const struct sockaddr *name:Server 端的位址資料。
- int namelen:第二個參數的大小。
- 成功回傳 0,失敗回傳 SOCKET_ERROR,可用 WSAGetLastError() 取得 error code。
7.傳送訊息。[server端] [client端]
函式 1:int send(SOCKET s, const char *buf, int len, int flags)
函式 2:int sendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen)
函式 1:int send(SOCKET s, const char *buf, int len, int flags)
函式 2:int sendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen)
- send() 和 sendto() 的差異在於,send() 只能用在 connection-oriented ( SOCK_STREAM ) 的連線,所以 sendto() 比 send() 多最後兩個參數,用來指定目的地的位址資訊。
- SOCKET s:socket() 函式回傳的 socket descriptor。
- const char *buf:訊息的指標。
- int len:訊息的長度。
- int flags:The flags parameter can be used to influence the behavior of the function beyond the options specified for the associated socket。(一般設 0)
MSG_DONTROUTE:不將訊息送給 gateway,而直接送給 host。(Specifies that the data should not be subject to routing. A Windows Sockets service provider can choose to ignore this flag.)
MSG_OOB:Sends OOB data (stream-style socket such as SOCK_STREAM only)。
- const struct sockaddr *to:目的地位址資訊。
- int tolen:目的地位址資訊的大小。
- 成功回傳傳送的資料長度,失敗回傳 SOCKET_ERROR。
8.接收訊息。[server端] [client端]
函式 1:int recv(SOCKET s, char *buf, int len, int flags)
函式 2:int recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen)
函式 1:int recv(SOCKET s, char *buf, int len, int flags)
函式 2:int recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen)
- recv() 和 recvfrom() 的差異在於,recv() 只能用在 connection-oriented ( SOCK_STREAM ) 的連線,所以 recvfrom() 比 recv() 多最後兩個參數,用來指定接收來源的位址資訊。
- SOCKET s:socket() 函式回傳的 socket descriptor。
- const char *buf:訊息的指標。
- int len:訊息的長度。
- int flags:The flags parameter can be used to influence the behavior of the function invocation beyond the options specified for the associated socket.。(一般設 0)
MSG_PEEK:Peeks at the incoming data。只看訊息內容,但不將訊息從 queue 移除。
MSG_OOB:Processes Out Of Band (OOB) data。
- const struct sockaddr *to:目的地位址資訊。
- int tolen:目的地位址資訊的大小。
- 成功回傳接收的資料長度,連線被關閉回傳 0。失敗回傳 SOCKET_ERROR。
9.設定 socket option 選項。[server端] [client端]
函式 :int setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen)
用來設定建立的 socket 一些特性,例如是否強制關閉等。
10.關閉 socket。[server端] [client端]
函式 :int closesocket(SOCKET s)
函式 :int setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen)
用來設定建立的 socket 一些特性,例如是否強制關閉等。
10.關閉 socket。[server端] [client端]
函式 :int closesocket(SOCKET s)
===============================================================
編譯環境
win7 + CodeBlocks16.01 + MinGW
編譯環境
win7 + CodeBlocks16.01 + MinGW
Scoket Server 範例:
執行後會等待 client 端連線,有連線進來時,則傳送 "sending data test" 訊息給 client 端。
執行後會等待 client 端連線,有連線進來時,則傳送 "sending data test" 訊息給 client 端。
#pragma comment(lib, "Ws2_32.lib")
#include <WinSock2.h>
#include <iostream>
using
namespace
std;
void
main()
{
int
r;
WSAData wsaData;
WORD
DLLVSERION;
char *message;
DLLVSERION = MAKEWORD(2,1);
//Winsocket-DLL 版本
//用 WSAStartup 開始 Winsocket-DLL
r = WSAStartup(DLLVSERION, &wsaData);
//宣告 socket 位址資訊
SOCKADDR_IN addr;
int
addrlen =
sizeof
(addr);
//建立 socket
SOCKET sListen;
//listening for an incoming connection
SOCKET sConnect;
//operating if a connection was found
//AF_INET:表示建立的 socket 屬於 internet family
//SOCK_STREAM:表示建立的 socket 是 connection-oriented socket
sConnect = socket(AF_INET, SOCK_STREAM, NULL);
//設定位址資訊的資料
addr.sin_addr.s_addr = inet_addr(
"127.0.0.1"
);
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
//設定 Listen
sListen = socket(AF_INET, SOCK_STREAM, NULL);
bind(sListen, (SOCKADDR*)&addr,
sizeof
(addr));
listen(sListen, SOMAXCONN);
//SOMAXCONN: listening without any limit
//等待連線
SOCKADDR_IN clinetAddr;
c = sizeof(struct sockaddr_in);
while( (sConnect = accept(sListen , (struct sockaddr *)&clinetAddr, &c)) != INVALID_SOCKET ){
puts("Connection accepted");
//Reply to the client
message = "Hello Client , I have received your connection. But I have to go now, bye\n";
send(sConnect , message , strlen(message) , 0);
}
}
Socket Client 範例:
#pragma comment(lib, "Ws2_32.lib")
#include <WinSock2.h>
#include <iostream>
#include <string>
using
namespace
std;
void
main()
{
string confirm;
char
server_reply[2000];
//開始 Winsock-DLL
int
r;
WSAData wsaData;
WORD
DLLVersion;
DLLVersion = MAKEWORD(2,1);
r = WSAStartup(DLLVersion, &wsaData);
//宣告給 socket 使用的 sockadder_in 結構
SOCKADDR_IN addr;
int
addlen =
sizeof
(addr);
//設定 socket
SOCKET sConnect;
//AF_INET: internet-family
//SOCKET_STREAM: connection-oriented socket
sConnect = socket(AF_INET, SOCK_STREAM, NULL);
//設定 addr 資料
addr.sin_addr.s_addr = inet_addr(
"127.0.0.1"
);
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
connect(sConnect, (SOCKADDR*)&addr,
sizeof
(addr));
//接收 server 端的訊息
puts("Connected");
//Receive a reply from the server
if((recv_size = recv(sConnect , server_reply , 2000 , 0)) == SOCKET_ERROR){
puts("recv failed");
}
puts("Reply received\n");
//Add a NULL terminating character to make it a proper string before printing
server_reply[recv_size] = '\0';
puts(server_reply);
//設定 closesocket 時,不經過 TIME-WAIT 過程,直接關閉socket
//BOOL bDontLinger = FALSE;
//setsockopt(sConnect,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));
//若之後不再使用,可用 closesocket 關閉連線
closesocket(sConnect);
訂閱:
文章 (Atom)