2015-03-12 56 views
9

de Kayıt ve Akış Bu kadar ben ile karşı karşıya geldi en zorlu işlevleri birini çözmek için bütün girişimleri bir sunum olduğu gibi gerçek bir soru değildir.Android: Aynı anda

Gerçek zamanlı videoları Wowza Server akışına göndermek için libstreaming kitaplığını kullanıyorum ve SD kartta aynı anda kaydetmem gerekiyor. Topluluğumdan yeni ideiler toplamak için tüm girişimlerimin altında sunuyorum. Bir mp4 dosya

Geliştirme

Akışı libstreaming dan

Kopya bayt Biz mp4 dosyasına gönderilen tüm bayt kopyalamak için kütüphane libstreaming bir durdurma yarattı. Libstreaming, baytları bir LocalSocket aracılığıyla Wowza sunucusuna gönderir. MediaRecorder'ın, kameraya ve cihazın mikrofonuna erişmesi ve çıktı dosyasının LocalSocket'in giriş akışı olarak ayarlanması. Yaptığımız şey, bu giriş akışı etrafında InputStream'den uzanan bir sarıcı oluşturmak ve içinde bir Dosya çıkış akışı oluşturmak. Yani, her zaman libstreaming LocaSocket giriş akışı üzerinden bir okuma yürütür, geçerli MP4 dosyasını oluşturmaya çalışan, çıktı akımına tüm verileri kopyalayın.

dosyayı okuyup çalıştık engeli, bu bozuk. MP4 dosyasından eksik meta bilgilerinin olduğunu fark ettik. Özellikle moov atomu. Bu başlığın gönderilmesi için zaman vermek amacıyla akışın kapanmasını ertelemeye çalıştık (bu hala bir tahmindi) ama işe yaramadı. Bu verinin tutarlılığını test etmek için, başlık da dahil olmak üzere videoyu kurtarmaya çalışmak için ücretli bir yazılım kullandık. Oynatılabilir hale geldi, ama çoğunlukla yeşil ekran oldu. Böylece bu güvenilir bir çözüm haline geldi. Ayrıca, serbest açık kaynak kodlu bir komut satırı programı olan "untrunc" kullanmayı denedik ve hiçbir moov atomu olmadığından kurtarma işlemini bile başaramadık. derlenmiş

Kullanım ffmpeg Kameraya

Geliştirme

FFMPEG Android uygulamaları içinde kullanmak için bir java arayüz ile bir gradle eklenti vardır erişmek için android. Kameraya komut satırından erişebileceğimizi düşündük (muhtemelen "/ dev/video0" daki gibi) ve medya sunucusuna gönderdik.

engeli Biz kameraya erişmeye çalışırken hata "İzin engellendi" var

. Bu çözüm, cihaza erişim sağlamak için cihazı rootlamak olabilir, ancak telefonları garantilerini kaybeder ve onları tutabilir. derlenmiş

Kullanım ffmpeg Biz FFMPEG bir mp4 dosya

MediaRecorder

aracılığıyla telefonun içinde kaydedilmektedir engeli akışı yapmaya çalıştı MediaRecorder

Geliştirme

ile kombine Android'e

FFMPEG henüz kayıtla bitmemiş MP4 dosyalarını aktaramaz.

Kullanım ffmpeg

Geliştirme libstreaming ile android derlenmiş

Libstreaming uygulaması ve sunucu arasındaki bağlantı olarak LocalServerSocket kullanır, bu yüzden biz kopyalamak için LocalServerSocket yerel adrese bağlı ffmpeg kullanabilirsiniz düşündüm SD kartın içinde doğrudan yerel bir dosyaya akış. Akış başladıktan hemen sonra, verileri bir dosyaya kaydetmeye başlamak için ffmpeg komutunu da çalıştırdık. Ffmpeg kullanarak, bir MP4 dosyasını uygun şekilde oluşturacağımıza inandık, bu da moov atom başlığının dahil edildiği anlamına geliyor.

engeli

oluşturulan "adresi" telefonun içinde yerel bir adres olarak, komut satırı üzerinden okunabilir değil. Yani kopya mümkün değil.

Kullanım OpenCV

Geliştirme

OpenCV bilgisayar vizyonu deneyler ve uygulamalar için yapıtaşlarını sağlayan bir açık kaynak, çapraz platform kütüphanesidir. Görüntü verilerini yakalamak, işlemek ve sunmak için yüksek seviyeli arayüzler sunar. Cihaz kamerasına bağlanmak için kendi API'leri vardır, böylece aynı anda akış ve kayıt için gerekli işlevselliklere sahip olup olmadığına bakmaya başladık.

engeli

Biz kütüphane gerçekten yapmak tanımlı değil öğrendim, ama görüntü matematiksel manipülasyon gibi daha. Biz libstreaming kullanmak için bile öneri aldık (zaten yapıyoruz).

Kullanım Kickflip SDK

Geliştirme

Kickflip android ve IOS gelişimi için kendi SDK sağlayan bir medya yayın hizmetidir. Ayrıca yeni bir protokol olan RTMP yerine HLS kullanır.

engeli

Onların SDK bizim app kullanılabilirliğini kırarak, cihazın ekranı kaplar kamera görüntüsü bir Aktivite oluşturmak gerektirir.

Kullanım Adobe Air

Biz uygulamasının diğer geliştiricilerin danışmanlık başladı

Gelişimi, zaten sunuculara o dere Play Store'da zaten mevcut bu. Bu geliştiricileri ile irtibatta alınıyor

engeli

, onlar bu teknolojiyi kullanarak aynı anda kayıt ve akarsu etmek mümkün olmazdı güvence verdi. Dahası, tüm uygulamayı Adobe Air kullanarak sıfırdan yeniden yapmak zorundayız.

GÜNCELLEME

WebRTC'de

Biz WebRTC this great project aşağıdaki kullanmaya başladı

geliştirilmesi. Sinyalleme sunucusunu NODEJS sunucumuza dahil ettik ve standart el sıkışmalarını soket üzerinden yapmaya başladık. Webrtc üzerinden yerel kayıt ve akış arasında geçiş yapmaktayız.

engeli

WebRTC'de her ağ yapılandırması çalışmaz. Bunun dışında, kamera edinimi tüm yerel koddur, bu da baytları kopyalamayı veya kesmeyi çok daha zorlaştırır.

+0

cine.io içinde Kickflip benzer görünüyor inşa etti. Ancak yine de test edilmiş. – sirvon

+0

Bu konuyla ilgili tüm bulgularınızı gönderdiğiniz için teşekkür ederiz. Android uygulamasında yaptığınız aynı şeyi yapmaya çalışıyorum. Deneyimlerinize dayanarak, çoğu yaklaşımın kendi sorunları vardır. Bir videoyu aynı anda akıtıp kaydetmek için bir çözüm buldunuz mu merak ediyordum? Eğer öyleyse, lütfen biraz açıklama veya örnek verebilir misiniz? – shahins

+0

Canlı akışa webRTC'ye geçiş yaptım, ancak henüz aynı anda kaydetmiyor. Bu ek bilgi ile listeyi güncelleyeceğim! –

cevap

0

kısa sürede OpenCV 3.0 müsait olur (RC1 here indirilebilir), bu listeye başka bir seçenek ekleyebilirsiniz:

kullanma OpenCV en Motion-JPEG encoder

İlgili konular