我修改了h264_encoder_impl
以使用基於nvidia網格的硬件編碼器。這是通過用Nvidia API調用替換OpenH264特定的調用來完成的。編碼流可以成功寫入文件,但和_size
的encoded_image_
是不夠的,RTPFragmentationHeader
也需要填寫。WebRTC:編碼器實現中的RTPFragmentationHeader是什麼?
// RtpFragmentize(EncodedImage* encoded_image,
// std::unique_ptr<uint8_t[]>* encoded_image_buffer,
// const VideoFrameBuffer& frame_buffer,
// SFrameBSInfo* info,
// RTPFragmentationHeader* frag_header)
// encode
openh264_->Encode(input, &info /*out*/);
// fragmentize ?
RtpFragmentize(&encoded_image_ /*out*/, &encoded_image_buffer_, *frame_buffer,
&info, &frag_header /*out*/);
// ...
// send
encoded_image_callback_->OnEncodedImage(encoded_image_, &codec_specific, &frag_header);
基於當前Openh264實施填補了RTPFragmentize()
frag_header
和VP8不同填充它。我可以看到NAL untis和圖層,其中也計算encoded_image->_length
,但我不知道如何。
我在任何地方都找不到任何文檔。我擁有的只有VP8和OpenH264。
那麼什麼是RTPFragmentationHeader
?它有什麼作用?什麼是encoded_image->_length
?使用定製H264編碼器時如何正確填充?我可以找到startcode,但接下來呢?如何填寫其所有成員?