分类 Streaming 下的文章

ubuntu下集成intel qsv加速ffmpeg转码

软硬件环境

  • ubuntu 16.04 64bit
  • ffmpeg binary 3.3.4
  • intel mss 2017-r3
  • Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz

准备工作

安装MSS

intel 安装包下载地址

https://software.intel.com/en-us/blogs/2017/07/11/whats-new-in-intel-media-server-studio-2017-r3,下载community的版本,这个是免费的

tar xvf MediaServerStudioEssentials2017R3.tar.gz
cd MediaServerStudioEssentials2017R3
tar xvf SDK2017Production16.5.2.tar.gz
cd SDK2017Production16.5.2
cd Generic(我这里是ubuntu系统,如果是centos就进入CentOS目录)

# 安装libva
cd opt/intel/mediasdk/opensource/libva/1.67.0.pre1-64009
tar xvf libva-1.67.0.pre1.tar.bz2
cd libva-1.67.0.pre1
./configure
make 
sudo make install

# 安装libdrm
cd ../../../../../../../
cd opt/intel/mediasdk/opensource/libdrm/2.4.67-64009
tar xvf libdrm-2.4.67.tar.bz2
cd libdrm-2.4.67
./configure
make
sudo make install

cd ../../../../../../
tar xvf intel-linux-media_generic_16.5.2-64009_64bit.tar.gz
sudo install_media.sh
sudo reboot

在~/.bashrc中添加环境变量设置语句

LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVERS_PATH=/opt/intel/mediasdk/lib64

系统重启后,检查上述安装是否成功

djstava@ThinkPad:~$ lsmod | grep 'i915'
i915                 1208320  12
i2c_algo_bit           16384  2 i915,radeon
drm_kms_helper        155648  2 i915,radeon
drm                   364544  16 ttm,i915,drm_kms_helper,radeon
video                  40960  2 i915,thinkpad_acpi
djstava@ThinkPad:~/ffmpeg-3.3.4$ vainfo 
libva info: VA-API version 0.99.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_0_32
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.99 (libva 1.67.0.pre1)
vainfo: Driver version: 16.5.2.64009-ubit
vainfo: Supported profile and entrypoints
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: <unknown entrypoint>
      VAProfileH264ConstrainedBaseline: <unknown entrypoint>
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264Main               : <unknown entrypoint>
      VAProfileH264Main               : <unknown entrypoint>
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264High               : <unknown entrypoint>
      VAProfileH264High               : <unknown entrypoint>
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileVP8Version0_3          : VAEntrypointEncSlice
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileVP8Version0_3          : <unknown entrypoint>
      VAProfileVP9Profile0            : <unknown entrypoint>
      <unknown profile>               : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : <unknown entrypoint>
编译kernel

下载地址

https://www.kernel.org/pub/linux/kernel/v4.x/,下载4.4版本,这个版本号必须要和MSS里提供的kernel补丁版本对应

tar xvf linux-4.4.tar.gz
cd linux-4.4
cp -r MediaServerStudioEssentials2017R3/SDK2017Production16.5.2/Generic/opt/intel/mediasdk/opensource/patches/kmd/4.4/intel-kernel-patches .
for i in intel-kernel-patches/*.patch; do patch -p1 < $i; done
make olddefconfig
make
make modules_install 
sudo make install
sudo reboot

编译比较耗时,静静等待

编译安装ffmpeg

通过apt-get安装的ffmpeg本身不支持h264_qsv选项(windows版本支持),因此必须自己去重新编译,首先安装必备的工具包

sudo apt-get install libvdpau-dev libvorbis-dev libass-dev libgnutls-dev frei0r-plugins-dev libopencore-amrwb-dev libopencore-amrnb-dev libopenjpeg-dev libopus-dev libsoxr-dev libvo-amrwbenc-dev libvpx-dev libwebp-dev libxvidcore-dev

在/opt/intel/mediasdk/include中创建文件夹mfx,并把include下的所有头文件拷贝到mfx文件夹中,然后

mkdir -p /opt/intel/mediasdk/lib64/pkgconfig
touch /opt/intel/mediasdk/lib64/pkgconfig/libmfx.pc

libmfx.pc文件内容如下

prefix=/opt/intel/mediasdk
exec_prefix=${prefix}
libdir=${prefix}/lib/lin_x64
includedir=${prefix}/include

Name: libmfx

Description: Intel Media Server Studio SDK
Version: 16.4.2
Libs: -L${libdir} -lmfx -lva -lstdc++ -ldl -lva-drm -ldrm
Cflags: -I${includedir} -I/usr/include/libdrm

最后一步,删除/usr/lib64下的所有libdrm*和libva*,我在这里被坑了很久,多个drm和va会导致ffmpeg编译时报错,如下

ffmpeg_qsv_01

ffmpeg 3.3.4源码包下载地址

https://www.ffmpeg.org/download.html#get-sources

tar xvf ffmpeg-3.3.4.tar.bz2
cd ffmpeg-3.3.4
./configure --enable-gpl --enable-version3 --enable-static --disable-debug --disable-indev=sndio --disable-outdev=sndio --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid
make
sudo make install

期间一般都会出现各种错误,通过查看config.log文件,依个解决.

测试

通过一下命令查看

djstava@ThinkPad:~/ffmpeg-3.3.4$ ffmpeg -codecs |grep qsv
ffmpeg version 3.3.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --enable-version3 --enable-libfdk-aac --enable-libmp3lame --enable-libx264 --enable-libmfx --extra-cflags=-I/opt/intel/mediasdk/include --extra-ldflags=-L/opt/intel/mediasdk/lib/lin_x64 --extra-libs=-lmfx --extra-libs=-ldl --enable-librtmp --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_vdpau h264_cuvid ) (encoders: libx264 libx264rgb h264_nvenc h264_qsv h264_vaapi nvenc nvenc_h264 )
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_qsv hevc_vaapi )
 DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2video mpegvideo mpegvideo_vdpau mpeg2_qsv mpeg2_cuvid ) (encoders: mpeg2video mpeg2_qsv mpeg2_vaapi )
 D.V.L. vc1                  SMPTE VC-1 (decoders: vc1 vc1_vdpau vc1_qsv vc1_cuvid )
 DEV.L. vp8                  On2 VP8 (decoders: vp8 vp8_cuvid vp8_qsv ) (encoders: vp8_vaapi )

参考资料

http://blog.csdn.net/ww506772362/article/details/49865437

https://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-installation.html

https://github.com/Intel-Media-SDK/MediaSDK

https://trac.ffmpeg.org/wiki/Hardware/QuickSync

http://blog.csdn.net/leochen1983/article/details/72742656

EasyDarwin流媒体服务器

软硬件环境

  • ubuntu 16.04
  • EasyDarwin latest

前言

EasyDarwin是基于Apple开源项目Darwin Streaming Server开发的流媒体服务器,支持RTSP点播、直播(推拉模式)、HLS直播等功能;经过几年的发展,项目已经非常稳定,而且相关扩展的项目也很多,形成了自己的项目族,具体可参考他们的官方网站http://www.easydarwin.org

编译安装

下载编译

git clone https://github.com/EasyDarwin/EasyDarwin
cd EasyDarwin
chmod a+x Buildit
./Buildit i386(或者x64,根据你的平台决定)

运行服务

源码编译完成后,会在i386目录下生成可执行文件easydarwin,默认的配置文件在WinNTSupport/easydarwin.xml

./easydarwin -c WinNTSupport/easydarwin.xml -d

easydarwin.xml包含了N多的配置项,你可以根据自己的需要进行修改。目前的话,你只需要知道视频存放路径movie_folder,默认值是Movies

备注

普通的mp4文件如果直接丢到Movies目录下,vlc是无法进行rtsp点播的。视频文件需要先借助第三方工具进行RTSP/RTP hint处理,这里推荐My MP4Box GUI,下载地址http://www.videohelp.com/software/My-MP4Box-GUI,视频处理非常简单,这里就不多说了。

easy_

相关错误码

| 响应吗 | 报文描述 | 定义 |
| :--- | :--------------------------------------- | ---- |
| 200 | Success OK 成功 | |
| 201 | Success Created 成功创建 | |
| 202 | Success Accepted 已接受用于处理,但处理尚未完成 | |
| 204 | Success No Content 已接收请求,但不存在要回送的信息 | |
| 206 | Success Partial Content 已接收请求,但要回送的信息不完整 | |
| 301 | Redirect Permanent Moved 请求的数据具有新的位置且更改是永久的。 | |
| 302 | Redirect Temp Moved 请求的数据临时具有不同 URI | |
| 303 | Redirect See Other 可在另一 URI 下找到对请求的响应 | |
| 305 | Use Proxy 必须通过位置字段中提供的代理来访问请求的资源 | |
| 400 | Client Bad Request 请求中有语法问题,或不能满足请求 | |
| 401 | Client Unauthorized 未授权客户端访问数据 | |
| 402 | Payment Required 需要付款,表示计费系统已有效 | |
| 403 | Client Forbidden 禁止, 即使有授权也不需要访问 | |
| 404 | Not Found 服务器找不到给定的资源 | |
| 405 | Method Not Allowed 请求的方法不支持 | |
| 407 | Proxy Authentication Required 代理认证请求,客户机首先必须使用代理认证自身 | |
| 408 | Request Timeout 请求超时 | |
| 409 | Conflict 请求冲突 | |
| 412 | Precondition Failed 前提条件失败 | |
| 415 | Unsupported Media Type 服务器拒绝服务请求,因为不支持请求实体的格式 | |
| 500 | Server Internal Error 内部错误,因为意外情况,服务器不能完成请求 | |
| 501 | Server Not Implemented 未执行,服务器不支持请求 | |
| 502 | Server Bad Gateway 错误网关,服务器接收到来自上游服务器的无效响应 | |
| 503 | Server Unavailable 由于临时过载或无法获得服务护,服务器无法处理请求 | |
| 505 | RTSP Version Not Supported 不支持的RTSP版本 | |
| 600 | Memcache Not Found 找不到Memcache服务器 | |
| 601 | Database Not Found 找不到Database 服务器 | |
| 602 | User Not Found 找不到用户信息(该用户不存在) | |
| 603 | Device Not Found 找不到设备信息(该设备不存在或者没有与请求用户绑定) | |
| 604 | Session Not Found 找不到会话信息(Session过期或者不存在) | |
| 605 | Service Not Found 找不到请求的服务模块 | |
| 620 | Password Error 密码错误 | |
| 621 | XML Parse Error XML解析失败 | |
| 622 | Permission Error 没有权限 | |

摄像头作为视频源进行rtsp直播

服务器端利用ffmpeg抓取摄像头数据,然后推送到easyDarwin

ffmpeg -f video4linux2 -s 720x576 -i /dev/video0 -f audio_device -f rtsp rtsp://127.0.0.1/live/test.sdp

客户端利用vlc播放

vlc rtsp://127.0.0.1:554/live/test.sdp

easy_02

参考文献

  • http://www.easydarwin.org/
  • http://www.360doc.com/content/11/0126/18/2633_89188287.shtml
  • http://www.easydarwin.org/article/EasyDarwin/43.html

Linux下编译Darwin Streaming Server

软硬件环境

  • ubuntu 16.04
  • Darwin Streaming Server 6.0.3

前言

Darwin Streaming Server是苹果公司开发的开源流媒体服务器,用C++语言编写,具有高性能、可扩展、模块化、跨平台等特性。

编译安装

源码下载

目前最高版本是6.0.3,也是好久没有更新了

http://dss.macosforge.org/

获取Linux平台的2个patch文件

http://download.csdn.net/detail/djstavav/9612758

编译

tar xvf DarwinStreamingSrvr6.0.3-Source.tar
cd DarwinStreamingSrvr6.0.3-Source
mv ../dss-6.0.3.patch .
mv ../dss-hh-20081021-1.patch .
patch -p1 < dss-6.0.3.patch
patch -p1 < dss-hh-20081021-1.patch
./Buildit install
cd DarwinStreamingSrvr6.0.3-Linux
sudo ./Install(这里会提示输入用户名及密码,在web管理中会使用到)

运行

安装成功后服务端程序自动运行,其它情况下也可以手动启动/usr/local/sbin/DarwinStreamingServer,如果想以debug模式启动,加入-d参数即可。服务端可供播放的视频文件存放于/usr/local/movies/,DSS配置文件是/etc/streaming/streamingserver.xml,日志文件存在于/var/streaming/logs,可登录http://192.168.95.134:1220(ip地址请自行修改)进行页面管理。

测试

现在用vlc来测试下DSS是否安装成功

dss_01

dss_02

dss_03

dss_04

dss_05

dss_06

dss_07

dss_08

dss_09

参考文献

  • http://dss.macosforge.org
  • http://blog.sina.com.cn/s/blog_6a4c492f0100lkq3.html