eingusteのblog

Windows向けFFmpegバイナリを個人的にビルド(コンパイル)してます。その更新情報など。

2014年01月

2014/02/01 追記
GnuTLS バージョン3.2.10が公開されました。
3.2.9からバグ修正が行われ、ソースに修正加える必要がなくなりました。
随時3.2.10を適用したffmpegバイナリに差し替えていきます。



GnuTLS バージョン3.2.9のインストール手順のメモです。

libnettlegmplibは別途インストール済みの状態です。
ソースそのままだとエラーで止まるので、少し修正が必要でした。
次のGnuTLS-3.2.9用パッチファイルを適用します。

gzip -d gnutls-3.2.9.diff.gz
tar xf gnutls-3.2.9.tar.xz
cd gnutls-3.2.9/
patch -p1 < ../gnutls-3.2.9.diff
./configure --enable-threads=win32 --disable-shared --disable-cxx --without-p11-kit --disable-guile
make
make install


64bit版はconfigureに--build=x86_64-w64-mingw32を追加します。

./configure --enable-threads=win32 --disable-shared --disable-cxx --without-p11-kit --disable-guile --build=x86_64-w64-mingw32

PS
バージョン3.2.7~3.2.8.1への更新を行っていなかったのは、更新するとffmpegTLSでエラーがでてしまい、ダウンロードできなくなってしまったからです。
たしかERROR in the push functionというエラーです
3.2.9でこれが修正されたのか、エラーを起こさなくなっていたので、3.2.6からバージョンアップさせました。多少ソースに修正が必要でしたが、正常に動作しているようなので、安心しています。

PS2
インストール後、pkg-configファイルに修正が必要です。
具体的には-lcrypt32を追記します。

Name: GnuTLS
Description: Transport Security Layer implementation for the GNU system
URL: http://www.gnutls.org/
Version: 3.2.9
Libs: -L${libdir} -lgnutls
Libs.private: -L/usr/local/lib -lz  -lws2_32 -lpthread -L/usr/local/lib -liconv
 -lws2_32  -lgmp -lcrypt32
Requires.private: nettle, hogweed, zlib
Cflags: -I${includedir}

PS
以下、gnutls-3.2.9.diffです。

diff -ur gnutls-3.2.9.orig/src/common.c gnutls-3.2.9/src/common.c
--- gnutls-3.2.9.orig/src/common.c	2013-11-11 02:59:14 +0900
+++ gnutls-3.2.9/src/common.c	2014-01-27 21:28:49 +0900
@@ -1073,3 +1073,40 @@
 }
 
 #endif
+
+#ifdef _WIN32
+static int neterrno()
+{
+int err = WSAGetLastError();
+  
+	if (err == WSAEWOULDBLOCK)
+  		return EAGAIN;
+	else if (err == WSAEINTR)
+  		return EINTR;
+	else if (err == WSAEINPROGRESS)
+		return EINPROGRESS;
+	return 0;
+}
+
+static ssize_t
+system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size)
+{
+	return send((long)ptr, data, data_size, 0);
+}
+
+static ssize_t
+system_read(gnutls_transport_ptr_t ptr, void *data, size_t data_size)
+{
+	return recv((long)ptr, data, data_size, 0);
+}
+
+void set_read_funcs(gnutls_session_t session)
+{
+	gnutls_transport_set_push_function(session, system_write);
+	gnutls_transport_set_pull_function(session, system_read);
+	gnutls_transport_set_errno_function(session, neterrno);
+
+}
+#else
+# define set_read_funcs(x)
+#endif
diff -ur gnutls-3.2.9.orig/src/common.h gnutls-3.2.9/src/common.h
--- gnutls-3.2.9.orig/src/common.h	2014-01-02 02:14:59 +0900
+++ gnutls-3.2.9/src/common.h	2014-01-30 14:10:41 +0900
@@ -34,6 +34,7 @@
 #ifdef _WIN32
 #include <io.h>
 #include <winbase.h>
+#include <errno.h>
 #undef OCSP_RESPONSE
 #endif
 
@@ -67,39 +68,3 @@
 
 void pkcs11_common(void);
 
-#ifdef _WIN32
-static int neterrno()
-{
-int err = WSAGetLastError();
-  
-	if (err == WSAEWOULDBLOCK)
-  		return EAGAIN;
-	else if (err == WSAEINTR)
-  		return EINTR;
-	else if (err == WSAEINPROGRESS)
-		return EINPROGRESS;
-	return 0;
-}
-
-static ssize_t
-system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size)
-{
-	return send((long)ptr, data, data_size, 0);
-}
-
-static ssize_t
-system_read(gnutls_transport_ptr_t ptr, void *data, size_t data_size)
-{
-	return recv((long)ptr, data, data_size, 0);
-}
-
-void set_read_funcs(gnutls_session_t session)
-{
-	gnutls_transport_set_push_function(vpninfo->https_sess, system_write);
-	gnutls_transport_set_pull_function(vpninfo->https_sess, system_read);
-	gnutls_transport_set_errno_function(vpninfo->https_sess, neterrno);
-
-}
-#else
-# define set_read_funcs(x)
-#endif
diff -ur gnutls-3.2.9.orig/src/tests.c gnutls-3.2.9/src/tests.c
--- gnutls-3.2.9.orig/src/tests.c	2014-01-02 02:14:59 +0900
+++ gnutls-3.2.9/src/tests.c	2014-01-25 22:17:50 +0900
@@ -27,6 +27,8 @@
 #include <signal.h>
 #else
 #include <errno.h>
+#include <winerror.h>
+#include <winsock2.h>
 #endif
 
 #include <stdio.h>
 

以上

2014-01-25時点のgit版バイナリです。
外部ライブラリGnuTLSをバージョン3.2.9に更新しました。

ダウンロードは↓

32bit版
FFmpeg version N-60163-g78a9f18(x86)(7z) 9.20M

64bit版
FFmpeg version N-60163-g78a9f18(x64)(7z) 9.61M

  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.100 / 55. 49.100
  libavformat    55. 26.100 / 55. 26.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  1.101 /  4.  1.101
  libavresample   1.  1.  0 /  1.  1.  0
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100

2014-01-20時点のgit版バイナリです。ffmpegとffplay、ffprobeを同梱しています。
ダウンロードは↓

32bit版
FFmpeg version N-59999-g9ab8f37(x86)(7z) 9.19M

64bit版
FFmpeg version N-59999-g9ab8f37(x64)(7z) 9.58M

  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 48.101 / 55. 48.101
  libavformat    55. 25.100 / 55. 25.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  1.100 /  4.  1.100
  libavresample   1.  1.  0 /  1.  1.  0
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100

2014-01-16にバージョン 1.2.5がリリースされました。
そのWindows用バイナリを用意しました。

ダウンロードは↓から

32bit版
FFmpeg 1.2.5 "Magic"(x86)(7z) 8.38M

64bit版
FFmpeg 1.2.5 "Magic"(x64)(7z) 8.71M

  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100

2014-01-16にバージョン 2.1.3がリリースされました。
そのWindows用バイナリを用意しました。

ダウンロードは↓から

32bit版
FFmpeg 2.1.3 "Fourier"(x86)(7z) 9.01M

64bit版
FFmpeg 2.1.3 "Fourier"(x64)(7z) 9.37M

  libavutil      52. 48.101 / 52. 48.101
  libavcodec     55. 39.101 / 55. 39.101
  libavformat    55. 19.104 / 55. 19.104
  libavdevice    55.  5.100 / 55.  5.100
  libavfilter     3. 90.100 /  3. 90.100
  libavresample   1.  1.  0 /  1.  1.  0
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100

↑このページのトップヘ