我已经修改h264_encoder_impl
为使用基于 nvidia 网格的硬件编码器。这是通过用 Nvidia API 调用替换 OpenH264 特定调用来完成的。编码流可以成功写入文件,但是写入_buffer
和_size
ofencoded_image_
还不够,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 的实现填充frag_header
和RTPFragmentize()
VP8 填充它不同。我可以看到带有 NAL untis 和层的东西,它们也可以计算encoded_image->_length
,但我不知道如何计算。
我在任何地方都找不到任何文档。VP8 和 OpenH264 实现就是我所拥有的。
那么是什么RTPFragmentationHeader
?它有什么作用?是什么encoded_image->_length
?使用自定义H264编码器时如何正确填充?我可以找到起始码,但接下来呢?如何填写其所有成员?