-Pat_period dosyasını da değiştirmeye çalışıyorum. Ancak şimdiye kadar başarısız oldum. Ama araştırmamı paylaşmak istiyorum. Aşağıdaki kod, mpegtsenc.c kaynak dosyasında aşağıdaki kodun nasıl çalıştığını açıkladı olarak kontrol ettim: Bu kod referansı olduğunu unutmayın.
if (ts->mux_rate > 1) {
service->pcr_packet_period = (ts->mux_rate * PCR_RETRANS_TIME)
(TS_PACKET_SIZE * 8 * 1000);
ts->sdt_packet_period = (ts->mux_rate * SDT_RETRANS_TIME)
(TS_PACKET_SIZE * 8 * 1000);
ts->pat_packet_period = (ts->mux_rate * PAT_RETRANS_TIME)
(TS_PACKET_SIZE * 8 * 1000);
değerleri tanımlamak aşağıdaki gibidir:
#define SDT_RETRANS_TIME 500
#define PAT_RETRANS_TIME 100
#define PCR_RETRANS_TIME 20
#define TS_PACKET_SIZE 188
Eğer değerleri hesaplarsanız, ifadeye göre doğru PCR değeri elde edersiniz. Bu örnekte -pat_period, -sdt_period, -pcr_period ve muxrate 6500000 değerlerine 7 değer verdim.
PCR örneği
6500000 * 7/188 * 8 * 1000 = 45500000/1504000 = 30.25265957446809
Gördüğünüz gibi ffmpeg hata ayıklama çizgisi PCR evey 30 pkts sonra iletilir. Ancak bu, SDT / PAT için geçerli değildir.
> [mpegts @ 0x22862c0] muxrate 6500000, pcr every 30 pkts, sdt every
> 2147483647, pat/pmt every 2147483647 pkts
PAT / SDT için benzer olmalıyız ancak gerçek değer beklenenden farklı. Hala üzerinde çalışıyorum. Bulgularımı paylaşmayı düşündüm. Uzmanların yardım edebileceğini takdir ediyorum.
Ayrıca PAT için 78'e nasıl ulaştığınızı önerebilir misiniz, bilmek ister misiniz? Her 78 pkte'den sonra olduğunu nasıl doğruladın?
Geçici çözüm:
1) İstediğiniz değeri kaynak kodda tanımlayabilir, derleyebilirsiniz ve sonuç alınana kadar test etmeye devam edebilirsiniz. 2) İstediğiniz sonucu almadıkça muxratı artırın, ancak çok fazla bant genişliği tüketimine mal olur. Artan paketlerin sayısını azaltacak, ardından PAT iletilecektir
Güncelleme:
Benim kötü hiçbiri TS için herhangi bir fark yaratmaz, aslında PAT / PMT süresine 5003'ün üzerine çıkarak analizörde alarm üreten 483ms'ye yükselir.