Agency Docs
QBESXStandalone

Agency-Phone Medya Depolama

Artık AgencyOS27 ile: telefonu zaten olan herkese ücretsiz güncelleme.

v27.1.2Ücretli8 Sayfalar

Fotoğraflar, videolar ve sesli mesajlar nerede saklanır

Agency Phone üzerinden çekilen her fotoğraf, video klip, ekran kaydı ve sesli mesaj, 27.1.1 sürümünden itibaren bizzat script tarafından kaydedilir. Nereye kaydedileceğini siz seçin:

DepolamaKurulumŞunlar için uygundur:
Yerel (varsayılan)Yok. Kurulumdan hemen sonra çalışır.Her sunucu. Dosyalar kendi sunucunuzda, kendi veritabanınızda kalır.
Cloudflare R2Tek seferlik yaklaşık 10 dakika. 10 GB'a kadar ücretsiz.Çok sayıda video içeren veya çok fazla oyuncusu olan sunucular.

Fivemanage ve Discord artık depolama alanı olarak kullanılmıyor. Discord webhook'ları loglar için hâlâ kullanılabilir.

Yerel depolama (varsayılan)

Yapılandırılacak hiçbir şey yoktur. Script, ilk başlatılışında veritabanınızda iki tablo oluşturur (agency_media ve agency_media_parts) ve dosyaları orada depolar. Yalnızca scriptin zaten ihtiyaç duyduğu oxmysql'e ihtiyacınız vardır.

Bunun sizin için anlamı:

  • Hesap yok, API anahtarı yok, ekstra kaynak yok. Sunucunuzun dışında hiçbir şey çalışmaz.
  • Güncellemeler güvenlidir. Dosyalar kaynak klasöründe değil veri tabanında yer alır, bu nedenle güncelleme sırasında klasörü değiştirmek tüm fotoğrafları korur.
  • Veritabanı yedekleriniz medyayı da içerir. Veritabanı, dosyaların kendisinden yaklaşık üçte bir oranında daha fazla büyür. Bir fotoğraf yaklaşık 150 KB yer kaplar.
  • Agency Phone ve Agency Pad depolama alanını paylaşır. Agency Cloud ile senkronize edilen fotoğraflar da dahil olmak üzere, birinde çekilen fotoğraf diğerinde görünür.
  • Agency Companion uygulaması bunları da gösterir, iOS, Android ve web uygulamasında. Bunun için de herhangi bir kurulum yapmanız gerekmez.

Hız

Dosyalar, oyunu engellemeden FiveM bağlantısının kendisi üzerinden iletilir. FiveM, bir oyuncunun sunucuya ne kadar hızlı veri gönderebileceğini sınırlar (saniyede yaklaşık 165 KB), bu nedenle:

NeKaydetme süresi yaklaşık
Fotoğraf1 saniye
Sesli mesaj1 saniyenin altında
15 saniyelik video klibi20 saniye (kamera ilerlemeyi yüzde olarak gösterir)

Diğer oyunculara bir dosya göstermek hızlıdır, klibin tamamı birkaç saniye içinde ulaşır. Sunucunuz çok fazla video kaydediyorsa, Cloudflare R2 klipleri neredeyse anında kaydeder.

config.lua İçindeki Ayarlar

AgencyConfig.MediaStorage = {
    Provider = 'local',                -- 'local' or 'cloudflare'

    MaxFileMegabytes = 10,             -- largest single file (clips, recordings)
    TransferKilobytesPerSecond = 1000, -- 'local': how fast files are sent to players

    Local = {
        RetentionDays = 30,            -- delete files older than this (0 = keep forever)
        MaxStorageGigabytes = 10,      -- delete the oldest files above this (0 = no limit)
    },
}
AyarNe işe yarar
RetentionDaysBundan daha eski dosyalar saatte bir otomatik olarak silinir. Silinen bir fotoğraf galeride küçük bir yer tutucu gösterir. Şunu ayarlayın: 0 her şeyi saklamak için.
MaxStorageGigabytesTüm dosyalar birlikte bundan daha büyük hale geldiğinde, ilk olarak en eskiler silinir. Şunu ayarlayın: 0 sınır olmaması için.
MaxFileMegabytesDaha büyük dosyalar reddedilir. Ayrıca video kliplerini ve ekran kayıtlarını da sınırlandırır.
TransferKilobytesPerSecondDosyalar oyunculara gönderilirken oyuncu başına hız. Oyun her zaman önceliklidir.

Cloudflare R2, adım adım

Cloudflare R2, aylık 10 GB depolama, 1 milyon yükleme ve 10 milyon indirmeye kadar ücretsizdir ve indirmeler hiçbir zaman ücretlendirilmez. Cloudflare, ücretsiz planda bile R2'yi etkinleştirdiğinizde bir ödeme yöntemi ister. Yalnızca ücretsiz limitleri aşarsanız ödeme yaparsınız.

1. R2'yi Etkinleştirin

  1. Giriş yapın: dash.cloudflare.com (ücretsiz bir hesap yeterlidir).
  2. Soldaki menüde açın: Depolama & veritabanları ve ardından R2 Object Storage.
  3. R2 aboneliğini ekleyin. Genel bakış şunları gösterir: $0.00 şimdi ödenecek. Şartları kabul edin ve şuna tıklayın: Etkinleştir.

2. Bir bucket oluşturun

  1. Tıkla Bucket oluştur.
  2. Örneğin şöyle adlandırın: myserver-media. İsim daha sonra değiştirilemez.
  3. Konumu açık bırakın Otomatik ve şuradaki depolama sınıfı: Standart.
  4. Tıkla Bucket oluştur.

3. Dosyaları görüntülenebilir yapın

  1. Bucket'ınızı açın ve şuraya gidin: Ayarlar.
  2. Altında Genel Geliştirme URL'si, tıklayın Etkinleştir, tür allow ve onaylayın.
  3. Görünen adresi kopyalayın, şuna benzer: https://pub-1a2b3c….r2.dev. Bu sizin PublicUrl.

Cloudflare, çok yoğun sunucular için r2.dev adresini sınırlandırır. Cloudflare üzerinde kendi alan adınız varsa bunu şu kısımdan ekleyebilirsiniz: Özel Alan Adları aynı yere yerleştirin ve bunun yerine bu adresi PublicUrl olarak kullanın.

4. Oyundan yüklemelere izin verin

  1. Hâlâ içinde Ayarlar, bulun CORS Politikası ve tıklayın Ekle.
  2. Metin alanındaki her şeyi silin, bunu yapıştırın ve tıklayın Kaydet:
[
  {
    "AllowedOrigins": ["https://cfx-nui-agency-phone", "https://cfx-nui-agency-pad"],
    "AllowedMethods": ["PUT", "GET"],
    "AllowedHeaders": ["*"],
    "MaxAgeSeconds": 3600
  }
]

Bu adım olmadan oyun yükleme yapamaz ve fotoğraflar kaydedilemez. Resource klasörünü yeniden adlandırdıysanız, klasör adınızı şunun arkasına ekleyin: cfx-nui-.

5. Bir anahtar oluşturun

  1. Geri dön: R2 Object Storage ve tıklayın API belirteçlerini yönetin.
  2. Tıkla API token oluştur (bir hesap token'ı yeterlidir).
  3. Yetkiler: Nesne Okuma & Yazma.
  4. Bucket seçiminin altından şunu seçin: yalnızca sizin bucket'ınız.
  5. Tıkla Oluştur. Cloudflare şunu gösterir: Access Key ID ve Secret Access Key yalnızca bir kez, ikisini de şimdi kopyalayın.
  6. Sizin Hesap ID R2 genel bakışında gösterilir ve aynı zamanda S3 adresinin ilk kısmıdır (https://<Account ID>.r2.cloudflarestorage.com).

6. Script içine girin

Anahtarlar şuraya gider: config_server.lua. Bu dosya yalnızca sunucu tarafından okunur ve oyunculara asla gönderilmez. Bunları şuraya koymayın: config.lua: bu dosya her oyuncuya gönderilir.

-- config_server.lua
AgencyServerConfig.Cloudflare = {
    AccountId       = 'your account id',
    Bucket          = 'myserver-media',
    AccessKeyId     = 'your access key id',
    SecretAccessKey = 'your secret access key',
    PublicUrl       = 'https://pub-1a2b3c....r2.dev',
}

Ardından sağlayıcıyı şurada ayarlayın: config.lua ve resource'u yeniden başlatın:

AgencyConfig.MediaStorage = {
    Provider = 'cloudflare',
    ...
}

Sunucu konsolu artık şunu gösterir: Media: storage: Cloudflare R2, bucket myserver-media. Bir şey eksikse konsol bunun ne olduğunu bildirir ve sorun giderilene kadar script yerel olarak kaydetmeye devam eder, böylece kamera çalışmayı asla durdurmaz.

Agency Phone ve Agency Pad'i birlikte mi kullanıyorsunuz? Her ikisi de aynı bucket'ı ve aynı key'i kullanabilir, her biri kendi dosyalarını kendi klasöründe tutar.

Çalıştığını kontrol edin

Bunu sunucu konsolunda (veya oyunda bir admin olarak), çevrim içi olan bir oyuncunun ID'si ile çalıştırın:

phonemediatest 1

Oyuncunun Agency Phone'u küçük bir test resmi kaydeder, diğer oyuncuların göreceği şekilde geri yükler, görüntüler ve kısa bir sesli mesaj oynatır. Konsol yanıt verir:

Media test passed for player 1 in 1361 ms: upload ok, download ok, shown as picture ok, app markup and backgrounds ok, voice message plays ok

Ekle big ayrıca 6 MB boyutunda bir video klibi test etmek için: phonemediatest 1 big.

Sorunlar ve çözümler

GörürsünüzDüzeltme
could not create the media tables konsoldaoxmysql çalışmıyor veya veritabanına erişemiyor. oxmysql bileşenini agency-phone öncesinde başlatın.
Provider is 'cloudflare', but config_server.lua is missing ...Beş değerden biri boş veya PublicUrl şununla başlamıyor: https://. 6. adımı kontrol edin.
Fotoğraflar şu hatayla başarısız oluyor: Cloudflare HTTP 403Anahtarın bu bucket için yazma izni yok veya bucket adı yanlış. Adım 5'i kontrol edin.
Fotoğraflar şu hatayla başarısız oluyor: Failed to fetch Cloudflare üzerinde4. adımdaki CORS politikası eksik veya farklı bir kaynak adına sahip.
Kaydedilen fotoğraflar Cloudflare üzerinde görünmüyor3. adımdaki Public Development URL kapalı veya PublicUrl başka bir bucket'a işaret ediyor.
Videonun kaydedilmesi uzun sürüyorYerel depolama ile normal, yukarıdaki Hız bölümüne bakın. Anında klipler için Cloudflare R2 kullanın.
Eski fotoğraflar kaybolduRetentionDays bunları sildi. Yükseltin veya şunu ayarlayın: 0.

Fivemanage veya Discord üzerinden geçiş

Taşınacak bir şey yok. Daha önce kaydedilen fotoğraflar eski bağlantılarını korur ve ilgili servis bunları sunmaya devam ettiği sürece görünür kalır. Yeni olan her şey seçtiğiniz depolama alanına gider. Eski ayarlar MediaStorageProvider, FiveManageApiUrl, FiveManageApiKey ve ScreenshotWebhook yoksayılır ve yapılandırmanızdan silinebilir.

Güvenlik

  • Yalnızca sunucunuza bağlı oyuncular yükleme yapabilir. Her yükleme önce bildirilir; tür ve boyut açısından kontrol edilir.
  • İçerik ilk baytlarına göre kontrol edilir. Bir web sayfası veya bir script hiçbir zaman fotoğraf kılığına sokularak saklanamaz.
  • Dosya adları 128 bit rastgeledir, tahmin edilemez veya listelenemez.
  • Yüklemeler ve indirmeler oyuncu başına sınırlandırılmıştır.
  • Cloudflare ile her yükleme, tek bir türe ve boyuta sahip tam olarak bir dosya için 5 dakika geçerli kendi bağlantısını alır. Gizli anahtar sunucunuzdan asla ayrılmaz.

Bu sayfadan sonra hâlâ takıldın mı? Buradan desteğimiz devralıyor.