Streaming
#navi(contents-page-name): No such page: VwebCONTENTS
REFERENCES
HEC wrote:
- 評価結果ですが、御社のパケット伝送方式では固定長で機械的に送信されているため、受信側で MPEGヘッダを探索する必要があり、非常にサーバとして負荷の高い処理を要求することになります。
- このため、再配信処理に非常に不向きな形態なので、このままでは製品として採用するのは困難な状況です。
- そこで相談ですが、可能であれば、MPEGのパケット伝送形態をヘッダー情報が先頭にくるように調整できないかどうか検討お願い致します。
- TS Packet (fixed 188byte)
- Header (fixed 4byte)
- Addaptation field
- Payload
疑惑のUDP送信シーン
udp_send_data( (char*)p_buf, read_size, p_network_info );
read_sizeはどうやって決められているかというと
chip_interface->readData( (RWDeviceOption)p_param->dev_opt, (PVOID)p_buf, p_param->TransferSize, read_size, p_param->lpOverlapIo );
readData
@param dev_opt = device option, can be one of the following: RW_DEV_OPTION_TRANSPORT_STREAM_MUX, RW_DEV_OPTION_PROGRAM_STREAM_MUX, RW_DEV_OPTION_TRANSPORT_STREAM_DEMUX, RW_DEV_OPTION_PROGRAM_STREAM_DEMUX @param p_buf = pointer to the buffer where read data will be written to @param size_to_read = size of data to read from device @param size_actually_read = size of data actually read from device @param overlapped = overlapped signal area (only used on windows) @return SUCCESS or FAILURE */ virtual int readData( RWDeviceOption dev_opt, PVOID p_buf, UINT32 size_to_read, UINT32 &size_actually_read, LPOVERLAPPED overlapped ) = 0;
ところでp_bufの大きさは
PVOID p_buf = malloc(p_param->TransferSize);
TransferSizeは
capture_param.TransferSize = xferSize;
xferSizeは
xferSize = computeTransferSize( cfg_parser.getBitRate(), cfg_parser.getStreamType(), cfg_parser.getSignalType(), cfg_parser.getMPEGType(), cfg_parser.getControlMode(), (cfg_parser.getFirmwareType() == G7XX_CODEC) );
// cap this at 66176 bytes (multiple of 2*188) xfer_size = MIN(xfer_size, 66176);
xfersize = MIN(xfersize, 1128);にしてしまう。ファイルに書き込むときは効率が悪くなるけどシラネ。
xfer_size /= 188 * 2; xfer_size *= 188 * 2;
128kbps | 音声がたまに途切れる。ビデオはブロック単位の解像度。 |
256kbps | 音声は正常。ちょっとした動きでもフレームドロップ。 |
512kbps | 激しい動きがある場合にフレームドロップ。 |
1Mbps | 動きのある部分でややブロックひずみが認識できる。シーンチェンジ時にまれにフレームドロップ&ブロックひずみが画面全体に認識される |
2Mbps | 平坦な部分の量子化ノイズが認識できる。激しい動きやシーンチェンジ時にブロック効果 |
3Mbps | 良好。ソース依存 |
5Mbps | 劣化が確認できない |
10Mbps | 同上。正常再生できる上限ビットレート |
11Mbps | シーンチェンジじに画像が一瞬停止 |
12Mbps | シーンチェンジ時に画像が停止&音声が一瞬途切れる |
15Mbps | 音声がとぎれとぎれ。映像が一瞬停止する場合あり。 |
20Mbps | 音声が再生されず。紙芝居 |
21Mbps | 再生停止。 |
128kbps | 音声がたまに途切れる。ビデオはブロック単位の解像度。数秒ごとの静止画。 |
256kbps | 音声は正常。数秒ごとの静止画。 |
512kbps | 数秒動いては静止,の繰り返し。 |
1Mbps | シーンチェンジ時に静止。 |
2Mbps | 激しい動きやシーンチェンジ時にブロックノイズ。 |
3Mbps | 良好。 |
5Mbps | 高画質。 |
10Mbps | 高画質。 |
11Mbps | 高画質。 |
12Mbps | 高画質。 |
15Mbps | 映像が一瞬停止する場合あり。 |
20Mbps | 音声が再生されず。紙芝居 |
21Mbps | 再生停止。 |
128kbps | 映像と音声が数秒ごとに停止。ブロックがみえる。 |
256kbps | 音声は正常。シーンチェンジ時にビデオが静止。ブロックが見える。 |
512kbps | シーンチェンジ時に一瞬静止。ブロックが見える。 |
1Mbps | シーンチェンジ時にブロックが見える。ぼんやりしているがそれ以外はきれい。 |
2Mbps | 十分な画質 |
3Mbps | 高画質。 |
5Mbps | 高画質。 |
10Mbps | 高画質。 |
12Mbps | 映像と音声が一瞬停止する場合あり。 |
15Mbps | 音声がとぎれとぎれ。 |
20Mbps | 音声が再生されず。紙芝居。 |
21Mbps | 再生停止。 |
128kbps | 音声がたまに途切れる。映像が数秒ごとに停止。ブロックがみえる。 |
256kbps | 音声は正常。映像が数秒ごとに停止。ブロックがみえる。 |
512kbps | シーンチェンジ時にブロックが見え,静止。 |
1Mbps | 激しい動き,でブロック。シーンチェンジ時にブロックが見え,一瞬静止 |
2Mbps | シーンチェンジ時にブロック |
3Mbps | 十分な画質。 |
5Mbps | 高画質。 |
10Mbps | 高画質。 |
12Mbps | 映像と音声が一瞬停止する場合あり。 |
15Mbps | 映像と音声が一瞬停止数秒ごとに静止。 |
20Mbps | 音声が再生されず。紙芝居。 |
21Mbps | 再生停止。 |
Vweb SDK付属のnet_send/net_recvを修正し,以下のようなことができるようになりました。
+----------------+ +--------------+ +-----+ + Vweb on x86 PC |---<UDP>---| Vweb on WPAR |---<VGA>---| CRT | +----------------+ +--------------+ +-----+ | | <NTSC> <NTSC> | | +-----+ +--+--+ | VCR | | TV + +-----+ +-----+
net_send option_files/enc_mp2ts_ntsc_01m.ini do_network=true hostname=192.168.100.10 \\ video_input_device=0xc40242
reset the chipの後に以下の3行を挿入。vw2002モードで動くようにする。
UINT32 size = 0; printf("=> Enable VW2002 MODE\n"); chip_interface->sendCommand(VW_IOCTL_DECODER_ONLY, NULL, size, NULL);
net_recv option_files/dec_mp2ts_ntsc.ini do_network=true hostname=192.168.100.7
encoder.exe option_files\enc_mp2ts_ntsc_03m.ini foo.mpg video_input_device=0xc40242 decoder.exe option_files\dec_mp2ts_ntsc.ini foo.mpg -vw2002
VW2010ひとつだけでnet_send/net_recvを動かす方法。
net_send option_files/enc_mp2ts_ntsc_01m.ini do_network=true hostname=127.0.0.1 \\ video_input_device=0xc40242
net_recv option_files/dec_mp2ts_ntsc.ini -save hoge.mpg do_network=true hostname=127.0.0.1
net_recvで-saveオプションを用いると,ハードウェアデコードが無効化され, 単に受け取ったストリームをファイルに書き込むようになる。
書き込まれたファイルは(実行属性を与えて)decoderで再生することができる。