Hãy tưởng tượng tôi có các khung AnxB H.264 đến từ cuộc trò chuyện trong thời gian thực. Cách tốt nhất để đóng gói trong luồng truyền tải MPEG2 trong khi duy trì thông tin thời gian cho phát lại tiếp theo là gì?đóng gói tốc độ khung hình H.264 luồng trong luồng truyền tải MPEG2
Tôi đang sử dụng thư viện libavcodec và libavformat. Khi tôi có được con trỏ đến đối tượng (* pcc) của loại AVCodecContext, tôi thiết lập các foll.
pcc->codec_id = CODEC_ID_H264;
pcc->bit_rate = br;
pcc->width = 640;
pcc->height = 480;
pcc->time_base.num = 1;
pcc->time_base.den = fps;
Khi tôi nhận đơn vị NAL, tôi tạo AVPacket và gọi av_interleaved_write_frame().
AVPacket pkt;
av_init_packet(&pkt);
pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = pst->index;
pkt.data = (uint8_t*)p_NALunit;
pkt.size = len;
pkt.dts = AV_NOPTS_VALUE;
pkt.pts = AV_NOPTS_VALUE;
av_interleaved_write_frame(fc, &pkt);
tôi về cơ bản có hai câu hỏi:
1) Đối với tốc độ khung hình biến đổi, là có một cách để không xác định foll. pcc-> time_base.num = 1; pcc-> time_base.den = fps; và thay thế bằng thứ gì đó để biểu thị tốc độ khung hình biến đổi?
2) Trong khi gửi gói, tôi nên gán "dấu thời gian" cho pkt.dts và pkt.pts?
Ngay bây giờ, khi tôi phát đầu ra bằng cách sử dụng ffplay, nó đang phát ở tốc độ khung hình không đổi (fps) mà tôi sử dụng trong mã ở trên.
Tôi cũng rất muốn biết cách điều chỉnh độ phân giải không gian khác nhau. Trong luồng mà tôi nhận được, mỗi khung hình chính được đặt trước bởi SPS và PPS. Tôi biết bất cứ khi nào độ phân giải không gian thay đổi. Có cách nào không phải chỉ định pcc-> width = 640; pcc-> height = 480; trả trước? Nói cách khác, chỉ ra rằng độ phân giải không gian có thể thay đổi giữa luồng.
Thanks a lot, Eddie