zoukankan      html  css  js  c++  java
  • [转]Iphone m3u8 segmenter from ffmpeg for video streaming

    源地址:http://lukasz.cepowski.com/devlog/30,iphone-m3u8-segmenter-from-ffmpeg-for-video-streaming

    Recent versions of ffmpeg contains a m3u8 segmenter feature which can be used for remuxing video files for streaming over http and watching video on iphone. 

    Segmenter feature usage for iphone


    Let's say that there is some .ts media file encoded with mpegts codec and we want to segment it for streaming over http. Segmenting is a process where one media container is being converted into set of smaller files with different quality to adjust the current quality to the bandwidth between streaming server and the display, iphone in this case. Segmenter will produce a set of smaller .ts files and a "playlist" .m3u8 which contains urls of the .ts files.

    To process media by ffmpeg builtin segmenter run:

     
    ffmpeg -re -i source.ts -codec copy -map 0 -f segment -segment_list foo.m3u8 -segment_list_flags +live -segment_time 10 out%03d.ts
     


    It will produce .m3u8 playlist and .ts files with segments.
    Note that this command will not transcode the video, it will just split data. Source .ts file should be encoded with mpegts codec in order to play it on iphone.

    Compile static version of ffmpeg


    Following steps are required to build stable static version of ffmpeg-1.0. Tested on debian i386 and amd64.
    Based on https://github.com/stvs/ffmpeg-static

    Install compiler and essential packages

     
    apt-get -y install build-essential pkg-config bzip2
     



    Create build and target directories

     
    BUILD_DIR="/home/user/build"; export BUILD_DIR
    TARGET_DIR="/home/user/target"; export TARGET_DIR
    mkdir -p $BUILD_DIR
    mkdir -p $TARGET_DIR
     



    yasm

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/yasm/yasm-1.2.0.tar.gz"
    tar zxvf yasm-1.2.0.tar.gz
    cd yasm-1.2.0
    ./configure --prefix=$TARGET_DIR
    make -j 4
    make install
     



    zlib

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/zlib/zlib-1.2.7.tar.bz2"
    tar jxvf zlib-1.2.7.tar.bz2
    cd zlib-1.2.7
    ./configure --prefix=$TARGET_DIR
    make -j 4
    make install
     



    bzip2

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/bzip2/bzip2-1.0.6.tar.gz"
    tar zxvf bzip2-1.0.6.tar.gz
    cd bzip2-1.0.6
    make
    make install PREFIX=$TARGET_DIR
     



    libpng

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/libpng/libpng-1.2.50.tar.gz"
    tar zxvf libpng-1.2.50.tar.gz
    cd libpng-1.2.50
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    make -j 4
    make install
     

    make -j 4
    make install


    libogg

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/libogg/libogg-1.3.0.tar.gz"
    tar zxvf libogg-1.3.0.tar.gz
    cd libogg-1.3.0
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    make -j 4
    make install
     



    libvorbis

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/libvorbis/libvorbis-1.3.3.tar.gz"
    tar zxvf libvorbis-1.3.3.tar.gz
    cd libvorbis-1.3.3
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    make -j 4
    make install
     



    libtheora

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/libtheora/libtheora-1.1.1.tar.bz2"
    tar jxvf libtheora-1.1.1.tar.bz2
    cd libtheora-1.1.1
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    make -j 4
    make install
     



    libvpx

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/libvpx/libvpx-v1.0.0.tar.bz2"
    tar jxvf libvpx-v1.0.0.tar.bz2
    cd libvpx-v1.0.0
    PATH="$TARGET_DIR/bin:$PATH" CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    PATH="$TARGET_DIR/bin:$PATH" make -j 4
    PATH="$TARGET_DIR/bin:$PATH" make install
     



    faac

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/faac/faac-1.28.tar.bz2"
    tar jxvf faac-1.28.tar.bz2
    cd faac-1.28
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    sed -i -e "s|^char *strcasestr.*|//|" common/mp4v2/mpeg4ip.h
    make -j 4
    make install
     



    x264

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/x264/x264-snapshot-20120425-2245.tar.bz2"
    tar jxvf x264-snapshot-20120425-2245.tar.bz2
    cd x264-snapshot-20120425-2245
    PATH="$TARGET_DIR/bin:$PATH" CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static
    PATH="$TARGET_DIR/bin:$PATH" make -j 4
    PATH="$TARGET_DIR/bin:$PATH" make install
     



    xvidcore

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/xvidcore/xvidcore-1.3.2.tar.gz"
    tar zxvf xvidcore-1.3.2.tar.gz
    cd xvidcore/build/generic
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    make -j 4
    make install
     



    lame

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/lame/lame-3.99.5.tar.gz"
    tar zxvf lame-3.99.5.tar.gz
    cd lame-3.99.5
    CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --enable-static --disable-shared
    make -j 4
    make install
     



    remove shared objects

     
    cd $TARGET_DIR/lib
    rm -f *.dylib*
    rm -f *.so*
     



    ffmpeg

     
    cd $BUILD_DIR
    wget "http://mirror.hellworx.com/ffmpeg/ffmpeg-1.0.tar.gz"
    tar zxvf ffmpeg-1.0.tar.gz
    cd ffmpeg-1.0
    PATH="$TARGET_DIR/bin:$PATH" CFLAGS="-I$TARGET_DIR/include" LDFLAGS="-L$TARGET_DIR/lib -lm" ./configure --prefix=$TARGET_DIR --extra-version=static --disable-debug --disable-shared --enable-static --extra-cflags=--static --disable-ffplay --disable-ffserver --disable-doc --enable-gpl --enable-pthreads --enable-postproc --enable-gray --enable-runtime-cpudetect --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-bzlib --enable-zlib --enable-nonfree --enable-version3 --enable-libvpx --disable-devices
    PATH="$TARGET_DIR/bin:$PATH" make -j 4
    PATH="$TARGET_DIR/bin:$PATH" make install
     



    Download static ffmpeg


    You can download static builds of ffmpeg from here:
    debian6-i386: http://mirror.hellworx.com/ffmpeg/ffmpeg-static/i386/ffmpeg.bin
    debian6-amd64: http://mirror.hellworx.com/ffmpeg/ffmpeg-static/amd64/ffmpeg.bin

  • 相关阅读:
    【模板时间】◆模板·III◆ 单调子序列
    【学时总结】◆学时·VII◆ 高维DP
    【例题收藏】◇例题·IV◇ Wooden Sticks
    【赛时总结】◇赛时·VI◇ Atcoder ABC-104
    【例题收藏】◇例题·III◇ 木と整数 / Integers on a Tree
    【学时总结】◆学时·VI◆ SPLAY伸展树
    【模板时间】◆模板·II◆ 树链剖分
    【赛时总结】◇赛时·V◇ Codeforces Round #486 Div3
    【例题收藏】◇例题·II◇ Berland and the Shortest Paths
    【例题收藏】◇例题·I◇ Snuke's Subway Trip
  • 原文地址:https://www.cnblogs.com/Proteas/p/3496267.html
Copyright © 2011-2022 走看看