Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added OpenSSL & various protocol support to FFmpeg backend #229

Merged
merged 26 commits into from Aug 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
a577c57
Added OpenSSL & different protocol support to FFmpeg backend
abhiTronix Jul 30, 2019
f2c53bd
Additional Fixes
abhiTronix Jul 31, 2019
77619d3
Fixed ./Configure command
abhiTronix Aug 2, 2019
c746b96
Updates for docker images:
abhiTronix Aug 4, 2019
d71b139
Fixed Empty continuation lines bug & added comments
abhiTronix Aug 4, 2019
bc69c01
Merge pull request #1 from abhiTronix/testing
abhiTronix Aug 4, 2019
991a981
fix inconsitent spacing
native-api Aug 4, 2019
0977132
Don't add perl 5.10 to PATH
native-api Aug 4, 2019
3dace9e
fix syntax error
native-api Aug 4, 2019
74d92e0
Merge pull request #2 from native-api/new_openssl
abhiTronix Aug 5, 2019
8fc6035
Fixed OpenSSL build fails in i686 Dockerfile due to buggy perl source
abhiTronix Aug 5, 2019
6f566cd
Fixing manylinux docker entrypoint for i686 in 32 bit images
abhiTronix Aug 5, 2019
f621ead
ENTRYPOINT not needed, it only affects "docker run" invocations
native-api Aug 6, 2019
e08dccb
manylinux1 provides better libcurl for cmake
native-api Aug 6, 2019
3525469
manylinux1 provides the toolchain and git
native-api Aug 6, 2019
8aa69b3
cleanup tar invocations
native-api Aug 6, 2019
af2f0c6
nasm is not installed in manylinux1
native-api Aug 6, 2019
d08a9c9
detect i686 in openssl configure
native-api Aug 6, 2019
43704d3
move perl to a separate subtree as it's a private dependency
native-api Aug 6, 2019
b72fb32
comment unusual openssl build step
native-api Aug 6, 2019
2eb9e03
avoid redundant work in perl build
native-api Aug 6, 2019
8e86d77
build each library in a separate dockerfile command for easier debugging
native-api Aug 6, 2019
8d12fd7
comment custom i686 step
native-api Aug 6, 2019
4808583
opencv now bundles libjpeg-turbo
native-api Aug 6, 2019
88597ed
update dockerfile README
native-api Aug 6, 2019
399baca
Merge pull request #4 from native-api/cleanup_r1
abhiTronix Aug 6, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
86 changes: 51 additions & 35 deletions docker/Dockerfile_i686
Expand Up @@ -14,43 +14,74 @@ ENV QTDIR /opt/Qt4.8.7
ENV PATH "$QTDIR/bin:$PATH"

RUN curl -O -L https://cmake.org/files/v3.9/cmake-3.9.0.tar.gz && \
tar -zxf cmake-3.9.0.tar.gz && \
tar -xf cmake-3.9.0.tar.gz && \
cd cmake-3.9.0 && \
yum -y install curl-devel zlib-devel && \
true '#manylinux1 provides curl-devel equivalent and libcurl statically linked \
against the same newer OpenSSL as other source-built tools \
(1.0.2s as of this writing)' && \
yum -y install zlib-devel && \
./configure --system-curl && \
make && \
make -j4 && \
make install && \
cd .. && \
rm -rf cmake-3.9.0*

RUN yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ libtool make mercurial pkgconfig zlib-devel -y && \
yum remove nasm -y && \
mkdir ~/ffmpeg_sources && \
cd ~/ffmpeg_sources && \
# https://trac.ffmpeg.org/wiki/CompilationGuide/Centos#GettheDependencies
# manylinux provides the toolchain and git; we provide cmake
RUN yum install freetype-devel bzip2-devel zlib-devel -y && \
mkdir ~/ffmpeg_sources

# Newer openssl configure requires newer perl
RUN curl -O -L https://www.cpan.org/src/5.0/perl-5.20.1.tar.gz && \
tar -xf perl-5.20.1.tar.gz && \
cd perl-5.20.1 && \
./Configure -des -Dprefix="$HOME/openssl_build" && \
true '#perl build scripts do much redundant work \
if running "make install" separately' && \
make install -j4 && \
cd .. && \
rm -rf perl-5.20.1*

RUN cd ~/ffmpeg_sources && \
curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1c.tar.gz && \
tar -xf OpenSSL_1_1_1c.tar.gz && \
cd openssl-OpenSSL_1_1_1c && \
true '#in i686, ./config detects x64 in i686 without linux32 \
when run from "docker build"' && \
PERL="$HOME/openssl_build/bin/perl" linux32 ./config --prefix="$HOME/ffmpeg_build" --openssldir="$HOME/ffmpeg_build" shared zlib && \
make -j4 && \
true '#skip installing documentation' && \
make install_sw && \
rm -rf ~/openssl_build

RUN cd ~/ffmpeg_sources && \
curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2 && \
tar xjvf nasm-2.13.02.tar.bz2 && cd nasm-2.13.02 && ./autogen.sh && \
tar -xf nasm-2.13.02.tar.bz2 && cd nasm-2.13.02 && ./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make -j4 && \
make install && \
cd ~/ffmpeg_sources && \
make install

RUN cd ~/ffmpeg_sources && \
curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
tar xzvf yasm-1.3.0.tar.gz && \
tar -xf yasm-1.3.0.tar.gz && \
cd yasm-1.3.0 && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make -j4 && \
make install && \
cd ~/ffmpeg_sources && \
make install

RUN cd ~/ffmpeg_sources && \
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
cd libvpx && \
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-pic --enable-shared && \
make -j4 && \
make install && \
cd ~/ffmpeg_sources && \
make install

RUN cd ~/ffmpeg_sources && \
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
tar -xf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH=~/bin:$PATH && \
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --enable-libvpx --enable-shared --enable-pic --bindir="$HOME/bin" && \
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --enable-openssl --enable-libvpx --enable-shared --enable-pic --bindir="$HOME/bin" && \
make -j4 && \
make install && \
echo "/root/ffmpeg_build/lib/" >> /etc/ld.so.conf && \
Expand All @@ -60,30 +91,15 @@ RUN yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ libtool
ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig:/root/ffmpeg_build/lib/pkgconfig
ENV LDFLAGS -L/root/ffmpeg_build/lib

RUN mkdir libjpeg-turbo && \
cd libjpeg-turbo && \
export PATH=~/bin:$PATH && \
curl -L https://kent.dl.sourceforge.net/project/libjpeg-turbo/1.5.3/libjpeg-turbo-1.5.3.tar.gz > libjpeg-turbo-1.5.3.tar.gz && \
tar xzvf libjpeg-turbo-1.5.3.tar.gz && \
cd libjpeg-turbo-1.5.3 && \
export CFLAGS="-fPIC" && \
export CXXFLAGS="-fPIC" && \
autoreconf -fiv && \
./configure --host=i686-pc-linux-gnu && \
make && \
make install && \
cd ../../ && \
rm -rf libjpeg-turbo

ENV JPEG_LIBRARY /opt/libjpeg-turbo/lib32/libjpeg.a
ENV JPEG_INCLUDE_DIR /opt/libjpeg-turbo/include

RUN curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/uapi/linux/videodev2.h && \
curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/uapi/linux/v4l2-common.h && \
curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/uapi/linux/v4l2-controls.h && \
curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/linux/compiler.h && \
mv videodev2.h v4l2-common.h v4l2-controls.h compiler.h /usr/include/linux

#in i686, yum metadata ends up with slightly wrong timestamps
#which inhibits its update
#https://github.com/skvark/opencv-python/issues/148
RUN yum clean all

ENV PATH "$HOME/bin:$PATH"
83 changes: 47 additions & 36 deletions docker/Dockerfile_x86_64
Expand Up @@ -14,43 +14,72 @@ ENV QTDIR /opt/Qt4.8.7
ENV PATH "$QTDIR/bin:$PATH"

RUN curl -O -L https://cmake.org/files/v3.9/cmake-3.9.0.tar.gz && \
tar -zxf cmake-3.9.0.tar.gz && \
tar -xf cmake-3.9.0.tar.gz && \
cd cmake-3.9.0 && \
yum -y install curl-devel zlib-devel && \
true '#manylinux1 provides curl-devel equivalent and libcurl statically linked \
against the same newer OpenSSL as other source-built tools \
(1.0.2s as of this writing)' && \
yum -y install zlib-devel && \
./configure --system-curl && \
make && \
make -j4 && \
make install && \
cd .. && \
rm -rf cmake-3.9.0*

RUN yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ libtool make mercurial pkgconfig zlib-devel -y && \
yum remove nasm -y && \
mkdir ~/ffmpeg_sources && \
cd ~/ffmpeg_sources && \
# https://trac.ffmpeg.org/wiki/CompilationGuide/Centos#GettheDependencies
# manylinux provides the toolchain and git; we provide cmake
RUN yum install freetype-devel bzip2-devel zlib-devel -y && \
mkdir ~/ffmpeg_sources

# Newer openssl configure requires newer perl
RUN curl -O -L https://www.cpan.org/src/5.0/perl-5.20.1.tar.gz && \
tar -xf perl-5.20.1.tar.gz && \
cd perl-5.20.1 && \
./Configure -des -Dprefix="$HOME/openssl_build" && \
true '#perl build scripts do much redundant work \
if running "make install" separately' && \
make install -j4 && \
cd .. && \
rm -rf perl-5.20.1*

RUN cd ~/ffmpeg_sources && \
curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1c.tar.gz && \
tar -xf OpenSSL_1_1_1c.tar.gz && \
cd openssl-OpenSSL_1_1_1c && \
PERL="$HOME/openssl_build/bin/perl" ./config --prefix="$HOME/ffmpeg_build" --openssldir="$HOME/ffmpeg_build" shared zlib && \
make -j4 && \
true '#skip installing documentation' && \
make install_sw && \
rm -rf ~/openssl_build

RUN cd ~/ffmpeg_sources && \
curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2 && \
tar xjvf nasm-2.13.02.tar.bz2 && cd nasm-2.13.02 && ./autogen.sh && \
tar -xf nasm-2.13.02.tar.bz2 && cd nasm-2.13.02 && ./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make -j4 && \
make install && \
cd ~/ffmpeg_sources && \
make install

RUN cd ~/ffmpeg_sources && \
curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
tar xzvf yasm-1.3.0.tar.gz && \
tar -xf yasm-1.3.0.tar.gz && \
cd yasm-1.3.0 && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make -j4 && \
make install && \
cd ~/ffmpeg_sources && \
make install

RUN cd ~/ffmpeg_sources && \
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
cd libvpx && \
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-pic --enable-shared && \
make -j4 && \
make install && \
cd ~/ffmpeg_sources && \
make install

RUN cd ~/ffmpeg_sources && \
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
tar -xf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH=~/bin:$PATH && \
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --enable-libvpx --enable-shared --enable-pic --bindir="$HOME/bin" && \
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --enable-openssl --enable-libvpx --enable-shared --enable-pic --bindir="$HOME/bin" && \
make -j4 && \
make install && \
echo "/root/ffmpeg_build/lib/" >> /etc/ld.so.conf && \
Expand All @@ -60,28 +89,10 @@ RUN yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ libtool
ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig:/root/ffmpeg_build/lib/pkgconfig
ENV LDFLAGS -L/root/ffmpeg_build/lib

RUN mkdir libjpeg-turbo && \
cd libjpeg-turbo && \
export PATH=~/bin:$PATH && \
curl -L https://kent.dl.sourceforge.net/project/libjpeg-turbo/1.5.3/libjpeg-turbo-1.5.3.tar.gz > libjpeg-turbo-1.5.3.tar.gz && \
tar xzvf libjpeg-turbo-1.5.3.tar.gz && \
cd libjpeg-turbo-1.5.3 && \
export CFLAGS="-fPIC" && \
export CXXFLAGS="-fPIC" && \
autoreconf -fiv && \
./configure && \
make && \
make install && \
cd ../../ && \
rm -rf libjpeg-turbo

ENV JPEG_LIBRARY /opt/libjpeg-turbo/lib64/libjpeg.a
ENV JPEG_INCLUDE_DIR /opt/libjpeg-turbo/include

RUN curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/uapi/linux/videodev2.h && \
curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/uapi/linux/v4l2-common.h && \
curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/uapi/linux/v4l2-controls.h && \
curl -O https://raw.githubusercontent.com/torvalds/linux/v4.14/include/linux/compiler.h && \
mv videodev2.h v4l2-common.h v4l2-controls.h compiler.h /usr/include/linux

ENV PATH "$HOME/bin:$PATH"
ENV PATH "$HOME/bin:$PATH"
3 changes: 1 addition & 2 deletions docker/README.md
Expand Up @@ -10,6 +10,5 @@ The images have following extra software installed:

- Qt 4.8.7
- Cmake 3.9.0
- FFmpeg with libvpx (latest snapshots at the build time)
- libjpeg-turbo 1.5.3
- FFmpeg with libvpx (latest snapshots at the build time) and recent openssl
- Some missing headers included from more recent Linux to be able to enable V4L / V4L2 support in OpenCV