热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HLS协议及java切片相关

http:blog.csdn.netcjsaftyarticledetails7922849简介:HTTPLiveStreaming(缩写是HLS&#x

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


简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。

是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP

的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速

率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包

含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。


HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防

火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

此协议详细内容请参考apple官方网站:https://developer.apple.com/resources/http-streaming/

有两种方式搭建HLSserver,

一种是利用apple SDK,

一种是利用adobe 的fms,4.5版本支持hls,参考,

http://www.adobe.com/products/flash-media-streaming/features._sl_id-contentfilter_sl_featuredisplaytypes_sl_new.html

adobe的fms现在很强大,但是商用需要licence。有兴趣的可以研究下。

一种是利用opensouce.我比较喜欢这一种。

 

方法:

opensource的方法主要是使用m3u8-segmenter+ffmpeg对ts文件进行分片。

因此思路就是:

1,用编译好的ffmpeg制作所需要的ts文件,

2,安装libavformat-dev版本,

3,编译m3u8-segmenter,

4,部署到nginx

5,高级功能,流切换

6,页面

过程

1,本来想下载ffmpeg源码编译,但是因为要涉及到faac,x264,lame库。有时候ffmpeg版本对这些库的版本又有最低版本要求,在编译

faac时候遇到以下问题


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 安装支持库  
  2. apt-get install automake autoconf m4 libtool  
  3.   
  4. -bash: ./bootstrap: /bin/sh^M: bad interpreter: No such file or directory  
  5.   
  6. 转换字符:  
  7. dos2unix bootstrap  
  8. make  
  9.   
  10. 错误:mpeg4ip.h:126:58: error: new declaration ‘char* strcasestr(const char*, const char*)’  
  11.   
  12. 解决方法:Remove line 126 containing strcasecmp from mpeg4ip.h as a temporary workaround  
  13.   
  14. make install时遇到  
  15. usr/local/share/man/man1文件夹无法创建问题。  


最后一个问题无法解决,好像是Linux(ubuntu)下同一个目录下,如果已经有一个文件了,则不能创建同名文件夹,遂放弃编译,

直接从ffmpeg网站:http://ffmpeg.org/download.html ,的linux下载页面下载编译好ffmpeg静态文件。这个静态文件的主要目的是

为了把各种文件转换成apple所规定的文件。所以需要AAC,mp3,x264库支持。


或者干脆按照2的方法。apt-get install ffmpeg.这样会得到ffmpeg可行性文件。


2,安装ffmpeg支持库,主要用于编译m3u8-segmenter,这里的ffmpeg支持库,其目的是给segmenter提供libavformat支持。不涉及编解码。

apt-get install libavformat-dev.


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Reading package lists... Done  
  2. Building dependency tree         
  3. Reading state information... Done  
  4. The following extra packages will be installed:  
  5.   libavcodec-dev libavcodec53 libavformat53 libavutil-dev libavutil51 libgsm1 libogg0 liborc-0.4-0  
  6.   libschroedinger-1.0-0 libspeex1 libtheora0 libva1 libvorbis0a libvorbisenc2 libvpx1  
  7. Suggested packages:  
  8.   libfaad-dev libgsm1-dev libogg-dev libschroedinger-dev libspeex-dev libtheora-dev libvorbis-dev libx11-dev  
  9.   libxext-dev libraw1394-dev libdc1394-22-dev speex  
  10. The following NEW packages will be installed:  
  11.   libavcodec-dev libavcodec53 libavformat-dev libavformat53 libavutil-dev libavutil51 libgsm1 libogg0 liborc-0.4-0  
  12.   libschroedinger-1.0-0 libspeex1 libtheora0 libva1 libvorbis0a libvorbisenc2 libvpx1  



这样会自动安装ffmepg几个相关库。


3,从https://github.com/johnf/m3u8-segmenter 下载m3u8-segmenter

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


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. gcc -Wall -g segmenter.c -o segmenter -lavformat  

从源码来看,因为只用到了avformat库,所以只链接这一个即可。生成segmenter文件,用help命令,可以看到已经成功。


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. HTTP Live Streaming - Segments TS file and creates M3U8 index.  
  2.         -i, --input FILE             TS file to segment (Use - for stdin)  
  3.         -d, --duration SECONDS       Duration of each segment (default: 10 seconds)  
  4.         -p, --output-prefix PREFIX   Prefix for the TS segments, will be appended  
  5.                                      with -1.ts, -2.ts etc  
  6.         -m, --m3u8-file FILE         M3U8 output filename  
  7.         -u, --url-prefix PREFIX      Prefix for web address of segments, e.g. http://example.org/video/  
  8.         -n, --num-segment NUMBER     Number of segments to keep on disk  
  9.         -h, --help                   This help  



从上图来看,语法很简单,这里贴一个我用的。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ./segmenter -i test.ts -n 30 -p sample_test -m stream-test.m3u8 -u http://192.168.1.10:8080/hls/  



i表示输入文件,n表示切割30个,p表示切割文件的前缀。m表示生成的m3u8文件名,u表示这些切割后的文件处于web server的哪个目录下,这个一定要和web目录匹配


4,部署到nginx。

nginx的相关部署我在前两个博客中已经详细说明,这里在jwplayer博客的基础上部署hls。

1)目录问题:

在html/jwplayer目录下,建立hls文件夹,将m3u8文件和切割后的全部ts文件拷贝到此目录下,

在VLC PLAYER或者ipad safie浏览器或者在ffplayer(我用的是0.11版本的windows编译版本)

上的访问路径应该是http://192.168.1.10:8080/hls/stream-test.m3u8

2)文件类型问题:编辑 /usr/local/nginx/conf/mime.types 文件,添加如下类型


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. application/x-mpegURL                 m3u8;  
  2. video/MP2T                             ts;   


3)重启nginx 

输入上述路径,你应该就看到视频了。


5,高级功能,流切换

上述m3u8文件,只有一个流,不具备流切换功能。在优酷上,如果是ipad客户端,可以看到有标清,高清,超清的按钮,其实那个是对应着不同标准

的(单个)m3u8文件,来实现流切换的,不知道apple是不是这样做的,apple好像是要求“智能”流切换。即不要求用户去选择,而是根据网络状况自适应的。

apple给的sample的流切换是把各个流的m3u8写在一个m3u8文件里实现的。

类似于这样,其实原理是一样的。


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #EXTM3U  
  2. #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=100000  
  3. video1/index1.m3u8  
  4. #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000  
  5. video2/index2.m3u8  




6,页面,

如果再继续搭建一个页面,把上述地址嵌在页面里面,这样配合CSS就比较美观了。页面可以在这个基础上,用webpy去做。



页面参考:

苹果开发网:https://developer.apple.com/resources/http-streaming/

博客:http://www.nginxs.com/linux/459.html

ffmpeg开发网:http://ffmpeg.org/download.html

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

adboe fms介绍:http://www.adobe.com/products/flash-media-streaming/features._sl_id-contentfilter_sl_featuredisplaytypes_sl_new.html


 

2014.02备注:

文中所描述的切片软件可能有问题,可选择这个

https://code.google.com/p/httpsegmenter/downloads/list




说明:在写这篇文章时不知道查了多少资料不是资料不完整就是根本不能安装,网上许多资料都是转载。写这篇文章时我亲自做了测试,安装完全通过,如果有什么不对的地方欢迎拍砖 
一、安装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就通过了。



推荐阅读
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在Java编程中,初始化List集合有多种高效的方法。本文介绍了六种常见的技术,包括使用常规方式、Arrays.asList、Collections.addAll、Java 8的Stream API、双重大括号初始化以及使用List.of。每种方法都有其特定的应用场景和优缺点,开发者可以根据实际需求选择最合适的方式。例如,常规方式通过直接创建ArrayList对象并逐个添加元素,适用于需要动态修改列表的情况;而List.of则提供了一种简洁的不可变列表初始化方式,适合于固定数据集的场景。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文提供了详细的 Filebeat 部署指南,涵盖了解压安装包、配置文件编辑以及启动服务等关键步骤。具体操作包括使用 `tar -zxvf filebeat-6.1.1-linux-x86_64.tar.gz` 解压安装包,并通过 `vi /home/elk/filebeat-6.4.2-linux/filebeat.yml` 编辑配置文件。此外,文章还介绍了最佳实践,帮助用户确保 Filebeat 的高效运行和数据传输的可靠性。 ... [详细]
author-avatar
临汾专业家具安装
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有