2017-01-23 13:55 GMT+08:00 Wentao Tang <wenta...@hotmail.com>: > Although ffmpeg use internel defined video and audio channel ids that are > than less than 64, I think it's better to patch ff_rtmp_packet_write write > chunk logic for more clearness? > > here is the patch(already tested by changing RTMP_VIDEO_CHANNEL >64 even > >256): > > diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c > index cde0da7..51288ad 100644 > --- a/libavformat/rtmppkt.c > +++ b/libavformat/rtmppkt.c > @@ -310,6 +310,18 @@ int ff_rtmp_packet_read_internal(URLContext *h, > RTMPPacket *p, int chunk_size, > } > } > > +static void ff_rtmp_packet_write_chunk_basic_header(uint8_t **p, int > mode, int channel_id) { > + if (channel_id < 64) { > + bytestream_put_byte(p, channel_id | (mode << 6)); > + } else if (channel_id < 64 + 256) { > + bytestream_put_byte(p, 0 | (mode << 6)); > + bytestream_put_byte(p, channel_id - 64); > + } else { > + bytestream_put_byte(p, 1 | (mode << 6)); > + bytestream_put_le16(p, channel_id - 64); > + } > +} > + > int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, > int chunk_size, RTMPPacket **prev_pkt_ptr, > int *nb_prev_pkt) > @@ -354,15 +366,8 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket > *pkt, > } > } > > - if (pkt->channel_id < 64) { > - bytestream_put_byte(&p, pkt->channel_id | (mode << 6)); > - } else if (pkt->channel_id < 64 + 256) { > - bytestream_put_byte(&p, 0 | (mode << 6)); > - bytestream_put_byte(&p, pkt->channel_id - 64); > - } else { > - bytestream_put_byte(&p, 1 | (mode << 6)); > - bytestream_put_le16(&p, pkt->channel_id - 64); > - } > + ff_rtmp_packet_write_chunk_basic_header(&p, mode, pkt->channel_id); > + > if (mode != RTMP_PS_ONEBYTE) { > bytestream_put_be24(&p, pkt->ts_field); > if (mode != RTMP_PS_FOURBYTES) { > @@ -391,10 +396,12 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket > *pkt, > return ret; > off += towrite; > if (off < pkt->size) { > - uint8_t marker = 0xC0 | pkt->channel_id; > - if ((ret = ffurl_write(h, &marker, 1)) < 0) > + p = pkt_hdr; > + ff_rtmp_packet_write_chunk_basic_header(&p, RTMP_PS_ONEBYTE, > pkt->channel_id); > + if ((ret = ffurl_write(h, pkt_hdr, p - pkt_hdr)) < 0) > return ret; > - written++; > + written += p - pkt_hdr; > + > if (pkt->ts_field == 0xFFFFFF) { > uint8_t ts_header[4]; > AV_WB32(ts_header, timestamp); > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
http://ffmpeg.org/git-howto.html use git format-patch make patch please. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel