我已修改h264_encoder_impl为使用基于 nvidia 网格的硬件编码器。这是通过用 Nvidia API 调用替换 OpenH264 特定调用来完成的。编码流可以成功写入文件,但写入_buffer和_size的encoded_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);
Run Code Online (Sandbox Code Playgroud)
当前Openh264根据实施填充frag_header在RTPFragmentize()和VP8不同填充它。我可以看到 NAL 单元和层也计算的东西,encoded_image->_length但我不知道如何。
我在任何地方都找不到关于它的任何文档。我只有 VP8 和 OpenH264 实现。
那么什么是RTPFragmentationHeader?它有什么作用?什么是encoded_image->_length?使用自定义H264编码器时如何正确填充?我可以找到 startcode 但接下来呢?如何填满它的所有成员?