Sending Jcodec H264 Encoded RTMP Message to Wowza

倾然丶 夕夏残阳落幕 提交于 2020-01-15 12:48:05

问题


I am making screen share java based application. I am done with encoding frames into H264 using JCodec java Library. I have Picture data in Byte Buffer. How I will send these encoded frames to Wowza through rtmp client? Can Wowza recognize the H264 encoded frames, Encoded by Jcodec library?


回答1:


Pretty much any of the "flash" media servers will understand h264 data in a stream. You'll need to encode your frames with baseline or main profile and then "package" the encoded bytes into flv streaming format. The first step is creating an AMF video data item, what that means is prefixing and suffixing the h264 encoded byte array based on its "NALU" content; in pseudo code it looks something like this:

if idr 
flv[0] = 0x17 // 0x10 key frame; 0x07 h264 codec id
flv[1] = 0x01 // 0 sequence header; 1 nalu; 2 end of seq
flv[2] = 0 // pres offset
flv[3] = 0 // pres offset
flv[4] = 0 // pres offset
flv[5] = 0 // size
flv[6] = 0 // size cont
flv[7] = 0 // size cont
flv[8] = 0 // size cont

else if coded slice
flv[0] = 0x27
flv[1] = 0x01
flv[2] = 0 // pres offset
flv[3] = 0 // pres offset
flv[4] = 0 // pres offset
flv[5] = 0 // size
flv[6] = 0 // size cont
flv[7] = 0 // size cont
flv[8] = 0 // size cont

else if PPS or SPS
.... skipping this here as its really complicated, this is the h264/AVC configuration data

copy(encoded, 0, flv, 9, encoded.length)

flv[flv.length - 1] = 0

The next step is packaging the AMF video data into an RTMP message. I suggest that you look at flazr or one of the android rtmp libraries for details on this step.

I've got a small example project that takes raw encoded h264 and writes it to an flv here if you want to see how its done.



来源:https://stackoverflow.com/questions/25321904/sending-jcodec-h264-encoded-rtmp-message-to-wowza

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!