【发布时间】:2018-01-19 19:23:31
【问题描述】:
我已修改 h264_encoder_impl 以使用基于 nvidia 网格的硬件编码器。这是通过用 Nvidia API 调用替换 OpenH264 特定调用来完成的。编码流可以写入文件成功,但写入encoded_image_的_buffer和_size还不够,还需要填写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编码器时如何正确填充?我可以找到起始码,但接下来呢?如何填写其所有成员?
【问题讨论】:
标签: video video-streaming webrtc h.264 openh264