HLS协议及java切片相关

http://blog.csdn.net/cjsafty/article/details/7922849


说明:在写这篇文章时不知道查了多少资料不是资料不完整就是根本不能安装,网上许多资料都是转载。写这篇文章时我亲自做了测试,安装完全通过,如果有什么不对的地方欢迎拍砖 
一、安装ffmpeg 
操作系统:centos 5.6 
(一)安装编译环境 
#yum install -y automake autoconf libtool gcc gcc-c++  
(二)安装所需程序库的RPM包到 centos(因为centos自带的库中没有ffmpeg包,这里相当于是扩展) 
view plaincopy to clipboardprint? 
#rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm  
如果上面的代码执行失败,你可以在本站下载,然后安装这个rpm包。 
(三)安装 Install ffmpeg 等模块 
yum -y install ffmpeg ffmpeg-devel 



CentOS yum方式安装ffmpeg

系统为CentOS 6.4,自己编译ffmpeg和众多解码器太痛苦了,yum方式安装ffmpeg的解码器很全,先用用看。

1、安装所需软件 

yum install -y automake autoconf libtool gcc gcc-c++

2、安装第三方更新源 

rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.i686.rpm

3、安装ffmpeg 

yum install ffmpeg ffmpeg-devel

会自动安装众多解码器,ffmpeg版本为0.6.5-1.el6.rf。看了下yum安装的解码器版本还不是很旧,但是ffmpeg版本较老。

4、测试一下 
将一个.avi视屏转为.flv格式 

ffmpeg -i Destination.avi -y -ab 56 -ar 22050 -r 15 -sameq test2.flv

转换前后两个文件的格式比较: 
转换前 

Destination.avi
   General
      Complete name : E:\PV\Destination.avi
      Format : AVI
      Format/Info : Audio Video Interleave
      Format/Family : RIFF
      File size : 79.5 MiB
      PlayTime : 4mn 1s
      Bit rate : 2754 Kbps
      StreamSize : 469 KiB
      Subject : doobie (2007)
      Writing application : VirtualDubMod 1.5.10.2 (build 2540/release)
      Writing library : VirtualDubMod build 2540/release
   Video #0
      Codec : XviD
      Codec/Family : MPEG-4
      Codec/Info : XviD project
      Codec profile : Streaming Video Profile/Level 1
      Codec settings/PacketBitStream : Yes
      Codec settings/BVOP : Yes
      Codec settings/QPel : No
      Codec settings/GMC : 0
      Codec settings/Matrix : Default
      PlayTime : 4mn 1s
      Bit rate : 2556 Kbps
      Width : 640 pixels
      Height : 480 pixels
      Display Aspect ratio : 4/3
      Frame rate : 29.976 fps
      Resolution : 8 bits
      Chroma : 4:2:0
      Interlacement : Progressive
      Bits/(Pixel*Frame) : 0.277
      StreamSize : 73.5 MiB
   Audio #1
      Codec : MPEG-1 Audio layer 3
      Codec profile : Joint stereo
      PlayTime : 4mn 1s
      Bit rate : 190 Kbps
      Bit rate mode : CBR
      Channel(s) : 2 channels
      Sampling rate : 48 KHz
      Resolution : 16 bits
      StreamSize : 5.47 MiB
      Writing library : Gogo (after 3.0)

转换后 

test2.flv
   General
      Complete name : E:\PV\test2.flv
      Format : Flash Video
      File size : 45.0 MiB
      PlayTime : 4mn 1s
      Bit rate : 1564 Kbps
   Video
      Codec : Sorenson H263
      PlayTime : 4mn 1s
      Bit rate : 195 Kbps
      Width : 640 pixels
      Height : 480 pixels
      Display Aspect ratio : 4/3
      Frame rate : 15.000 fps
      Bits/(Pixel*Frame) : 0.042
   Audio
      Codec : MPEG-1 Audio Layer 3
      Bit rate : 55 bps
      Channel(s) : 2 channels
      Sampling rate : 22 KHz
      Resolution : 16 bits

参考资料:

http://www.rosoo.net/a/201205/16001.html

分类:  LINUX  发表评论


  • CentOS编译安装ffmpeg以及相关编码解码器

    CentOS编译安装ffmpeg是一件很痛苦的过程,因为各种编码器、解码器什么的很繁杂,而且相互依赖关系更复杂。

    编译了一天终于把它搞定并基本测试无问题,以下是步骤。

    安装yasm

    wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
    tar zxf yasm-1.2.0.tar.gz
    cd yasm-1.2.0
    ./configure
    make
    make install

    安装frei0r(先安装新版autoconf,这会覆盖掉系统中的旧版本哦)

    wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
    tar zxf autoconf-2.69.tar.gz
    cd autoconf-2.69
    ./configure –prefix=/usr
    make
    make install

    wget http://files.dyne.org/frei0r/releases/frei0r-plugins-1.4.tar.gz
    tar zxf frei0r-plugins-1.4.tar.gz
    cd frei0r-plugins-1.4
    ./configure
    make
    make install

    安装gnutls

    参考:http://blog.creke.net/800.html

    安装mp3lame

    wget http://iweb.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
    tar zxf lame-3.99.5.tar.gz
    cd lame-3.99.5
    make
    make install

    安装opencore-amr

    wget http://iweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz
    tar zxf opencore-amr-0.1.3.tar.gz
    ./configure –enable-shared
    make
    make install

    安装opus

    wget http://downloads.xiph.org/releases/opus/opus-1.0.2.tar.gz
    tar zxf opus-1.0.2.tar.gz
    cd opus-1.0.2
    make
    make install

    安装rtmpdump

    wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz
    tar zxf rtmpdump-2.3.tgz
    cd rtmpdump-2.3
    make
    make install

    安装schroedinger(先安装好orc库)

    wget http://code.entropywave.com/download/orc/orc-0.4.17.tar.gz
    tar zxf orc-0.4.17.tar.gz
    cd orc-0.4.17
    ./configure
    make
    make install
    /sbin/ldconfig

    wget http://diracvideo.org/download/schroedinger/schroedinger-1.0.11.tar.gz
    tar zxf schroedinger-1.0.11.tar.gz
    cd schroedinger-1.0.11
    PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure
    make
    make install

    安装soxr(注:新版libsoxr貌似与当前ffmpeg不兼容,用旧版)

    yum install -y xz
    wget http://hivelocity.dl.sourceforge.net/project/soxr/soxr-0.1.0-Source.tar.xz
    xz -d soxr-0.1.0-Source.tar.xz
    tar xf soxr-0.1.0-Source.tar
    cd soxr-0.1.0-Source
    ./go
    cd Release/
    make
    make install
    /sbin/ldconfig

    安装speex(先安装libogg库)

    wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
    tar zxf libogg-1.3.0.tar.gz
    ./configure
    make
    make install
    /sbin/ldconfig

    wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz
    tar zxf speex-1.2rc1.tar.gz
    cd speex-1.2rc1
    ./configure
    make
    make install

    安装theora(先安装好libvorbis库和libsdl库)

    wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
    tar zxf libvorbis-1.3.3.tar.gz
    ./configure
    make
    make install

    wget http://www.libsdl.org/release/SDL-1.2.15.tar.gz
    tar zxf SDL-1.2.15.tar.gz
    cd SDL-1.2.15
    ./configure
    make
    make install
    /sbin/ldconfig

    wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
    tar zjf libtheora-1.1.1.tar.bz2
    ./configure
    make
    make install

    安装twolame

    wget http://downloads.sourceforge.net/twolame/twolame-0.3.13.tar.gz
    tar zxf twolame-0.3.13
    .tar.gz
    cd twolame-0.3.13
    ./configure
    make
    make install
    /sbin/ldconfig

    安装VisualOn AAC(注:github的tag和master版均无法autoconf,用zeranoe版代替)

    wget wget http://ffmpeg.zeranoe.com/builds/source/external_libraries/vo-aacenc-0.1.2.tar.xz
    xz -d vo-aacenc-0.1.2.tar.xz
    tar xf vo-aacenc-0.1.2.tar
    cd vo-aacenc-0.1.2
    ./configure
    make
    make install

    安装VisualOn AMR-WB(注:github的tag和master版均无法autoconf,用zeranoe版代替)

    wget http://ffmpeg.zeranoe.com/builds/source/external_libraries/vo-amrwbenc-0.1.2.tar.xz
    xz -d vo-amrwbenc-0.1.2.tar.xz
    tar xf vo-amrwbenc-0.1.2.tar
    cd vo-amrwbenc-0.1.2
    ./configure

    安装libvpx(注:新版libvpx貌似与当前ffmpeg不兼容,用旧版)

    wget http://webm.googlecode.com/files/libvpx-v1.1.0.tar.bz2
    tar jxf libvpx-v1.1.0.tar.bz2
    cd libvpx-v1.1.0
    ./configure
    make
    make install

    安装x264

    wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
    tar jxf last_x264.tar.bz2
    cd x264-snapshot-20130311-2245/
    ./configure –enable-shared
    make
    make install

    安装xvid

    wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
    tar zxf xvidcore-1.3.2.tar.gz
    cd xvidcore
    cd build/generic
    ./configure
    make
    make install

    最重要的一步——编译安装ffmpeg!

    wget http://ffmpeg.org/releases/ffmpeg-1.1.3.tar.gz
    tar zxf ffmpeg-1.1.3.tar.gz
    cd ffmpeg-1.1.3
    PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure –disable-static –enable-shared –enable-gpl –enable-version3 –enable-bzlib –enable-fontconfig –enable-frei0r –enable-gnutls –enable-libfreetype –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopus –enable-librtmp –enable-libschroedinger –enable-libsoxr –enable-libspeex –enable-libtheora –enable-libtwolame –enable-libvo-aacenc –enable-libvo-amrwbenc –enable-libvorbis –enable-libvpx –enable-libx264 –enable-libxvid –enable-zlib
    make
    make install

    注1:

    我在编译安装时参考Windows Build:http://ffmpeg.zeranoe.com/builds/。

    注2:

    与Windows Build相比,以下没有选项开启:

    –enable-libgsm –enable-libilbc -enable-libass –enable-libbluray –enable-libcaca –enable-libopenjpeg –disable-w32threads –enable-avisynth –enable-libxavs

    分类: 所谓技术 | 标签: CentOS,ffmpeg,安装,编码器,编译,解码器



http://www.cnblogs.com/mystory/archive/2013/04/07/3006200.html


linux下搭建生成HLS所需的.ts和.m3u8文件

要想利用HLS来实现视频的在线播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放。

在Mac下,苹果提供了streamingTools的工具,里面有mediafilesegmenter和mediastreamsegmenter来分别实现文件和直播流的切割,一行命令直接就可以将输入的原始视频文件导出成几个ts和索引文件,直接就可以用了。但是一般服务器都是基于linux的,要想在linux下实现同样的切割,着实费了一番功夫。

网上也找了好多相关的资料,基本是利用开源的ffmpeg和segmenter工具来实现,但是这搭建这个环境的过程是曲折的,编译这些工具的时候会出现好多错误,难以解决,好多文章的步骤介绍的也很复杂,又要安装各种包,又要修改源代码,经过几天的各种反复尝试,才知道在不是直接将源文件切割,而是先要转换一下,再切割,最终终于痛苦的摸索到了一个成功的路子,特此记录下来以防忘记。

1、首先获得ffmpeg

  apt-get install ffmpeg

2、安装ffmpeg支持库,为m3u8-segmenter准备

  apt-get install libavformat-dev

3、获得m3u8-segmenter

  https://github.com/johnf/m3u8-segmenter 

4、编译并安装m3u8-segmenter

  aclocal

  automake -ac

  ./configure

  make

  sudo make install  

4、编译其中的文件m3u8-segmenter

  gcc -Wall -g  m3u8-segmenter.c -o segmenter -lavformat 

5、利用ffmpeg将已有的视频文件转换成ts文件

  ffmpeg -y -i -vcodec copy -acodec copy -vbsf h264_mp4toannexb

其中in file为待转换的视频文件,比如input.mov,output file为转换后的文件,要命名为output.ts

6、利用segmenter将转换好的ts文件切割成多个ts片,并生成.m3u8的索引文件

  ./segmenter -i out.ts -n 10 -p segmenter_test -m test.m3u8 -u 

i表示输入文件,n表示切割10秒,p表示切割文件的前缀。m表示生成的m3u8文件名,u表示这些切割后的文件处于web server的哪个目录下

PS:实践过程中发现一个问题,就是切片之后,最后一段ts不管是不是10s,同样会按10s去切,导致切好后的视频最后一段会加上去几秒的黑段来补足10s,原因是segmenter.c中的程序写的还有缺陷,修正方法如下:

https://github.com/johnf/m3u8-segmenter/pull/10/files

参考:

http://blog.chinaunix.net/uid-25530360-id-3483535.html

http://shappy1978.iteye.com/blog/1071815

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

http://hi.baidu.com/lphack/item/83865611c5f82c8988a956df

http://blog.cnrainbird.com/index.php/2012/03/25/ping_guo_http_shi_pin_dian_bo_ji_shu/



3.  TS流分割器segmenter的安装与使用

第一个 m3u8-segmenter

        git clone https://github.com/johnf/m3u8-segmenter

        下载m3u8-segmenter 下载后不要用它的反复编译,直接取m3u8-segmenter.c文件。

执行

gcc -Wall -g m3u8-segmenter.c -o segmenter -lavformat -lavcodec -lavutil


第二个 segmenter

svn co http://httpsegmenter.googlecode.com/svn/trunk segmenter

cd  segmenter

gcc -Wall -g segmenter.c -o segmenter -lavformat -lavcodec -lavutil -std=c99


安装好其中一个后

cp segmenter /usr/bin/

把执行文件拷贝过去。



下面给2个超简单的执行例子

直接转成ts

ffmpeg -i vp5.flv -acodec copy -vcodec libx264 vp5.ts

分割转成ts 一秒为单位

ffmpeg -ss 0 -t 30 -i vp5.flv -acodec copy -vcodec libx264 1.ts

ffmpeg -ss 30 -t 60 -i vp5.flv -acodec copy -vcodec libx264 2.ts

合并

ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

切割

m3u8-segmenter -i test.ts -d 10 -p segmenter_test -m test.m3u8 -u http://127.0.0.1:8080/Video/


这样就可以切片出m3u8文件  直接使用hls


 

如何编译m3u8_segmenter

  535人阅读  评论(0)  收藏  举报

最近研究hls,发现需要使用m3u8_segmenter这个程序,搞了半天才编译通过,特此记录一下。

使用正常的./configure等编译老是出错误

gcc -Wall -g m3u8-segmenter.c -o segmenter -lavformat -lavcodec -lavutilm3u8-segmenter.c: In function add_output_stream:

m3u8-segmenter.c:58: warning: implicit declaration of function avformat_new_stream

m3u8-segmenter.c:58: warning: assignment makes pointer from integer without a cast

m3u8-segmenter.c: In function main:

m3u8-segmenter.c:343: warning: implicit declaration of function avformat_find_stream_info

m3u8-segmenter.c:380: error: AVFMT_FLAG_IGNDTS’ undeclared (first use in this function)

m3u8-segmenter.c:380: error: (Each undeclared identifier is reported only once

m3u8-segmenter.c:380: error: for each function it appears in.)

m3u8-segmenter.c:390: warning: implicit declaration of function avcodec_open2

m3u8-segmenter.c:397: error: AVIO_FLAG_WRITE’ undeclared (first use in this function)

 

在网上查资料,特别是参考xjd_1985的文章,m3u8-segmenter工程编译和使用

 

./configure FFMPEG_CFLAGS=-I../ffmpeg-2.1.1  FFMPEG_LIBS='-L ../ffmpeg-2.1.1/libavformat -L../ffmpeg-2.1.1/libavcodec -L../ffmpeg-2.1.1/libavutil -pthread -lavformat -lavcodec -lavutil -lm -lz'

 

 

ffmpeg-2.1.1是我使用ffmpeg的版本和目录

然后再make就通过了。


你可能感兴趣的:(HLS协议及java切片相关)