2011-10-29 6 views
1

セキュリティカメラからRTSPストリームをキャプチャし、エンコードプラットフォームとしてOSXを使用してiphoneにトランスコードする(ライブストリーミング)。 私は正しく動作しており、調整しています。 しかし、要求された解像度を出力していないようです。不正な出力解像度またはffmpegからのFPSの取得

Input #0, h264, from 'pipe:': 

    Duration: N/A, bitrate: N/A 
    Stream #0.0: Video: h264, yuv420p, 1600x1200, 10 fps, 10 tbr, 1200k tbn, 20 tbc 
    [mpegts @ 0x10100c200] muxrate VBR, pcr every 1 pkts, sdt every 200, pat/pmt every 40 pkts 
    Output #0, mpegts, to 'pipe:': 
    Metadata: 
    encoder   : Lavf52.93.0 
    Stream #0.0: Video: libx264, yuv420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 90k tbn, 10 tbc 
Stream mapping: 
    Stream #0.0 -> #0.0 

あなたは、その作業は、それが何らかの理由で1600×1200を出力していることがわかります。これは、これは、ステータスレポートである私のスクリプト

/Applications/SecurityCamera/openRTSP -v -c -t rtsp://10.0.1.118/ch1-s1 | \ 
    /Applications/SecurityCamera/ffmpeg \ 
    -r 10 -i - \ 
    -y -an -ab 64000 -f mpegts -vcodec copy -s 960x640 \ 
    -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 \ 
    -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 \ 
    -sc_threshold 40 -i_qfactor 0.71 -bt 400k -maxrate 524288 -bufsize 524288 \ 
    -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 \ 
    -aspect 960:640 -r 10 -g 10 -async 2 -\ 
    |/Applications/SecurityCamera/mediastreamsegmenter -b http://localhost:8080/\ 
     -f /Library/WebServer/Documents/ -i stream.m3u8 -t 10 -s 4 -D 

です。 (おそらく-vcodec copyコピーすべてのコーデックのパラメータだけでなく、コーデックタイプ?)

私は-vcodec libx264-vcodec copyを変更した場合、私は(正しい960x640を述べ、)正しいステータスレポートを得るが、2 FPS(理由にストリーミングスイッチ?イム!入力と出力の両方を強制的に)、それは54フレーム後に停止します(下記の出力を参照)

Seems stream 0 codec frame rate differs from container frame rate: 20.00 (20/1) -> 10.00 (20/2) 
Input #0, h264, from 'pipe:': 
    Duration: N/A, bitrate: N/A 
    Stream #0.0: Video: h264, yuv420p, 1600x1200, 10 fps, 10 tbr, 1200k tbn, 20 tbc 
[buffer @ 0x100d02420] w:1600 h:1200 pixfmt:yuv420p 
[scale @ 0x100d026f0] w:1600 h:1200 fmt:yuv420p -> w:960 h:640 fmt:yuv420p flags:0x4 
[libx264 @ 0x10100d400] using SAR=1/1 
[libx264 @ 0x10100d400] frame MB size (60x40) > level limit (1620) 
[libx264 @ 0x10100d400] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowCTZ SlowAtom 
[libx264 @ 0x10100d400] profile Constrained Baseline, level 3.0 
[mpegts @ 0x10100c200] muxrate VBR, pcr every 1 pkts, sdt every 200, pat/pmt every 40 pkts 
Output #0, mpegts, to 'pipe:': 
    Metadata: 
    encoder   : Lavf52.93.0 
    Stream #0.0: Video: libx264, yuv420p, 960x640 [PAR 1:1 DAR 3:2], q=10-51, 200 kb/s, 90k tbn, 10 tbc 
Stream mapping: 
    Stream #0.0 -> #0.0 
read pmap fffps= 3 q=37.0 size=  37kB time=0.10 bitrate=3008.0kbits/s bits/s  
video pid set at 100 
found sequence start 
    next segment value 1026000 
written bytes 376 skipped 0 
frame= 54 fps= 2 q=-1.0 Lsize=  160kB time=5.40 bitrate= 242.0kbits/s  
video:141kB audio:0kB global headers:0kB muxing overhead 12.872737% 
frame I:6  Avg QP:34.68 size: 23524 
[libx264 @ 0x10100d400] frame P:48 Avg QP:41.53 size: 75 
[libx264 @ 0x10100d400] mb I I16..4: 63.9% 0.0% 36.1% 
[libx264 @ 0x10100d400] mb P I16..4: 0.1% 0.0% 0.0% P16..4: 0.8% 0.1% 0.0% 0.0% 0.0% skip:99.0% 
[libx264 @ 0x10100d400] final ratefactor: 38.54 
[libx264 @ 0x10100d400] coded y,uvDC,uvAC intra: 57.7% 22.3% 2.0% inter: 0.0% 0.1% 0.0% 
[libx264 @ 0x10100d400] i16 v,h,dc,p: 23% 35% 27% 15% 
[libx264 @ 0x10100d400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 32% 16% 4% 3% 3% 7% 4% 8% 
[libx264 @ 0x10100d400] i8c dc,h,v,p: 83% 11% 5% 0% 
[libx264 @ 0x10100d400] kb/s:214.43 
+0

同じことをしようとしている人のためのメモ:OpenRTSPを使用している場合は、-tを使用して、ソースでUDPではなくTCPでデータを配信するようにします。 ffmpegを使用している場合は、?tcpをRTSP URLの末尾に追加します。これはffmpegがTCP経由でデータストリームを要求することを示します。これにより、復号化中に多数のエラーの原因が排除されます。 – Adam

答えて

1

をあなたが推測として、-vcodec copyは「エンコーディングの同じタイプを使用する」という意味ではありません、それは「を介してデータを渡す意味します変わらない "。あなたが設定している無数の他のオプションのどれも、コーデックをcopyに設定して何もしていません。

私はこれをlibx264に設定し、実際にビデオをトランスコードすると仮定しますが、今は多くの作業を行う必要があるため、ビデオのトランスコードは遅くなります。特に、入力ビデオが1600x1200 h264の場合。

必要に応じて、表示の時点でのスケーリングは間違いなくトランスコードより速く、そうでなければ調整を続けます。

+0

絶対に正しい。バッファがアンダーフロー/オーバーフローしていることを説明するエラーの欠如は、それを少しわかりにくくしていました。 私はついにそれを稼働させましたが、ソースで解像度を落とさなければならなかったので、約800x600x10fpsの結果はすべてAtom 330 CPUで処理できます。マシンを24時間365日で動かすことはほとんどありませんでしたので、私はそれをさらに落としました。 Man、どのように私はH264エンコーダを含むマザーボードが好きですか?またはFPGA! さらに詳しい説明はこちら http://doom10.org/index.php?topic=2008.msg9351 – Adam

関連する問題