Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ffmpeg 通过DASH的WebM实时流媒体_Ffmpeg_Webm_Mpeg Dash - Fatal编程技术网

Ffmpeg 通过DASH的WebM实时流媒体

Ffmpeg 通过DASH的WebM实时流媒体,ffmpeg,webm,mpeg-dash,Ffmpeg,Webm,Mpeg Dash,我正在按照说明尝试通过DASH制作WebM实时流媒体。我的输入来自Axis摄像机,它以h264编码的形式进行流式传输。我使用node加速ffmpeg进程。我能够创建.hdr文件和.chk文件。甚至创建了.mpd文件,但它是空的,我收到一个错误,它说: Could not write header for output file #0 (incorrect codec parameters ?): Operation not permittedStream mapping: Stream #0:0

我正在按照说明尝试通过DASH制作WebM实时流媒体。我的输入来自Axis摄像机,它以h264编码的形式进行流式传输。我使用node加速ffmpeg进程。我能够创建.hdr文件和.chk文件。甚至创建了.mpd文件,但它是空的,我收到一个错误,它说:

Could not write header for output file #0 (incorrect codec parameters ?): Operation not permittedStream mapping: Stream #0:0 -> #0:0 (copy)
以下是我所有的代码:

var express = require('express');
spawn = require('child_process').spawn;

var app = express();

app.use(express.static(__dirname + '/public'));

app.listen(8080);
console.log("Running on Port 8080");

var ffmpeg1 = spawn('ffmpeg', [
    '-y',
    //video
    '-i', 'rtsp://admin:password@192.168.1.54:554/axis-media/media.amp?videocodec=h264&resolution=1280x720',

    '-map', '0:0',
    '-pix_fmt', 'yuv420p',
    '-color_range', '2',
    '-c:v', 'libvpx-vp9',

    '-s', '1280x720',
    '-keyint_min', '25',
    '-g', '25', 

    // //VP9_LIVE_PARAMS
    '-speed', '6', 
    '-tile-columns', '4',
    '-frame-parallel', '1', 
    '-threads', '8', 
    '-static-thresh', '0', 
    '-max-intra-rate', '300',
    '-deadline', 'realtime', 
    '-lag-in-frames', '0',
    '-error-resilient', '1',

    '-f', 'webm_chunk',
    '-header', 'public/glass_360.hdr',
    '-chunk_start_index', '1',
    'public/glass_360_%d.chk',
]);


setTimeout(()=> {
  var ffmpeg2 = spawn('ffmpeg', [
    '-y',
    '-f', 'webm_dash_manifest',
    '-live', '1',
    '-i', 'public/glass_360.hdr',
    '-c', 'copy',
    '-map', '0',
    '-r', '25',
    '-framerate', '25',

    '-f', 'webm_dash_manifest',
    '-live', '1',

    '-adaptation_sets', '"id=0,streams=0"',
    '-chunk_start_index', '1',
    '-chunk_duration_ms', '2000',
    '-time_shift_buffer_depth', '7200',
    '-minimum_update_period', '7200',

    'public/glass_live_manifest.mpd'
  ]);
  ffmpeg2.stdout.on('data', 
      function (data) {
          console.log('ff2std: ' + data);
      }
  );

  ffmpeg2.stderr.on('data', 
      function (data) {
          console.log('ff2err: ' + data);
      }
  );
}, 5000);

ffmpeg1.stdout.on('data', 
    function (data) {
        console.log('ff1std: ' + data);
    }
);

ffmpeg1.stderr.on('data', 
    function (data) {
        console.log('ff1err: ' + data);
    }
);
以下是我的全部输出:

Running on Port 8080
ff1err: ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-frei0r --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.1.2/include/openjpeg-2.1 --enable-nonfree --enable-vda

ff1err:   libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100

ff1err: Input #0, rtsp, from 'rtsp://admin:password@192.168.1.54:554/axis-media/media.amp?videocodec=h264&resolution=1280x720':
  Metadata:
    title           : Session streamed with GStreamer
    comment         : rtsp-server
  Duration: N/A, start: 0.033344
ff1err: , bitrate: N/A
    Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 180k tbc

ff1err: [swscaler @ 0x7f8df281bc00] deprecated pixel format used, make sure you did set range correctly

ff1err: [libvpx-vp9 @ 0x7f8df2800600] v1.6.1

ff1err: Output #0, webm_chunk, to 'public/glass_360_%d.chk':
  Metadata:
    title           : Session streamed with GStreamer
    comment         : rtsp-server
    encoder         : Lavf57.56.101

ff1err:     Stream #0:0: Video: vp9 (libvpx-vp9), yuv420p(pc), 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 200 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.64.101 libvpx-vp9
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> vp9 (libvpx-vp9))
Press [q] to stop, [?] for help

ff1err: frame=   10 fps=0.0 q=0.0 size=N/A time=00:00:00.36 bitrate=N/A speed=0.71x    
ff1err: frame=   25 fps= 25 q=0.0 size=N/A time=00:00:00.96 bitrate=N/A speed=0.946x    
ff1err: frame=   40 fps= 26 q=0.0 size=N/A time=00:00:01.56 bitrate=N/A speed=1.03x    
ff1err: frame=   55 fps= 27 q=0.0 size=N/A time=00:00:02.16 bitrate=N/A speed=1.07x    
ff1err: frame=   70 fps= 28 q=0.0 size=N/A time=00:00:02.76 bitrate=N/A speed=1.09x    
ff1err: frame=   85 fps= 28 q=0.0 size=N/A time=00:00:03.36 bitrate=N/A speed=1.11x    
ff2err: ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-frei0r --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.1.2/include/openjpeg-2.1 --enable-nonfree --enable-vda

ff2err:   libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100

ff2err: [webm_dash_manifest @ 0x7fbc5b80b400] Could not find codec parameters for stream 0 (Video: vp9, none, 1280x720): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options

ff2err: Input #0, webm_dash_manifest, from 'public/glass_360.hdr':
  Metadata:
    title           : Session streamed with GStreamer
    encoder         : Lavf57.56.101
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: vp9, none, 1280x720
ff2err: , SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      webm_dash_manifest_file_name: glass_360.hdr
      webm_dash_manifest_track_number: 1

ff2err: Could not write header for output file #0 (incorrect codec parameters ?): Operation not permittedStream mapping:
  Stream #0:0 -> #0:0 (copy)

ff2err:     Last message repeated 1 times

ff1err: frame=  101 fps= 29 q=0.0 size=N/A time=00:00:04.00 bitrate=N/A speed=1.13x    
ff1err: frame=  116 fps= 29 q=0.0 size=N/A time=00:00:04.60 bitrate=N/A speed=1.14x    
ff1err: frame=  131 fps= 29 q=0.0 size=N/A time=00:00:05.20 bitrate=N/A speed=1.15x    
ff1err: frame=  146 fps= 29 q=0.0 size=N/A time=00:00:05.80 bitrate=N/A speed=1.15x    
ff1err: frame=  161 fps= 29 q=0.0 size=N/A time=00:00:06.40 bitrate=N/A speed=1.15x    
ff1err: frame=  177 fps= 29 q=0.0 size=N/A time=00:00:07.04 bitrate=N/A speed=1.16x    
ff1err: frame=  192 fps= 29 q=0.0 size=N/A time=00:00:07.64 bitrate=N/A speed=1.16x    
ff1err: frame=  207 fps= 29 q=0.0 size=N/A time=00:00:08.24 bitrate=N/A speed=1.16x    
ff1err: frame=  222 fps= 29 q=0.0 size=N/A time=00:00:08.84 bitrate=N/A speed=1.17x    
ff1err: frame=  237 fps= 29 q=0.0 size=N/A time=00:00:09.44 bitrate=N/A speed=1.17x    
ff1err: frame=  252 fps= 29 q=0.0 size=N/A time=00:00:10.04 bitrate=N/A speed=1.17x  

为什么ffmpeg要创建一个空的.mpd文件?

只需删除额外的引号

'-adaptation_sets', 'id=0,streams=0',

只需删除额外的引号

'-adaptation_sets', 'id=0,streams=0',

我认为来自ffmpeg的错误与您传递的输出参数有关,或者您正在写入以访问受保护的目录,如/var/www/

检查输出参数,并使用sudo进行尝试

/home/tilak/bin/ffmpeg-f webm_dash_manifest-live 1-i/var/www/webm_live/glass_360.hdr-vcodec libvpx-map 0-f webm_dash_manifest-live 1-adaption_set“id=0,streams=0”-chunk_start_index 1-chunk_duration_ms 2000/var/www/html/glass_live_manifest.mpd


上面的命令在我的例子中创建MPD文件

我认为ffmpeg的错误与您传递的输出参数有关,或者您正在写入以访问受保护的目录,如/var/www/

检查输出参数,并使用sudo进行尝试

/home/tilak/bin/ffmpeg-f webm_dash_manifest-live 1-i/var/www/webm_live/glass_360.hdr-vcodec libvpx-map 0-f webm_dash_manifest-live 1-adaption_set“id=0,streams=0”-chunk_start_index 1-chunk_duration_ms 2000/var/www/html/glass_live_manifest.mpd


上面的命令在我的例子中创建MPD文件

你能找到答案吗?你能找到答案吗?