آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آموزش encrypt کردن ویدئو با استفاده از لایبرری libMedia به روش on the air

محمد  7 سال پیش  7 سال پیش
+7 0

سلام.

ابتدا لایبرری limedia رو از اینجا دانلود و به برنامه خودتون اضافه کنید.

در این روش شما ویدئوی تهیه شده توسط خودتون رو ابتدا توسط این کتابخانه encrypt (رمز نگاری) میکنید و سپس ویدئوها رو داخل برنامه خودتون وارد میکنید یا لینک دانلودشون رو در اختیار کاربر قرار میدید. ویدئوهای encrypt شده داخل گوشی کاربر ذخیره میشن ولی فقط توسط برنامه شما قابل خوندن هستند. مزیت این لایبرری اینه که ویدئوها رو بدون اینکه توی گوشی ذخیره بشن بصورت (On The Air) داخل برنامه شما decrypt و قابل خوندن میکنه.

من اطلاعی از مسائل مربوط به license و copy right جهت انتشار برنامه در google play ندارم.

مرحله اول: encrypt کردن ویدئوها:

از متد زیر استفاده میکنیم:

به جای  1234567890123456 رمز دلخواه خودمون رو میذاریم

public static void encrypt2(File videoFile) {

final byte[] buf = new byte[8192];
final Cipher cipher;
try {
cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("1234567890123456".getBytes(), "AES"), new IvParameterSpec(new byte[16]));
final InputStream inputStream = new FileInputStream(G.DIR_INPUT + "/" + videoFile.getName());
final OutputStream outputStream = new CipherOutputStream(new FileOutputStream(G.DIR_OUTPUT + "/" + videoFile.getName()), cipher);

while (true) {
int n = inputStream.read(buf);
if (n == -1) break;
outputStream.write(buf, 0, n);
}
outputStream.close();
inputStream.close();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

حالا ویدئوی ما encrypt شده و دیگه لازم نیست نگران دزدیده شدن اون باشیم.

مرحله دوم: اجرای ویدئو در برنامه خودمون:

قبل از هرچیز عبارت زیر رو داخل متد onCreate برنامه قرار بدید که یکبار اجرا بشه:

 Licensing.allow(getApplicationContext());

در ادامه:

 LocalSingleHttpServer mServer;

public void playENCVideo2(final String videoName) {
try {
Licensing.allow(getApplicationContext());

mServer = new LocalSingleHttpServer();

mServer.setCipherFactory(new MyCipherFactory());
mServer.start();
File file = new File(G.DIR_VIDEOS + "/" + videoName);

videoView.setVisibility(View.VISIBLE);

String path = mServer.getURL(file.getPath());

videoView.setVideoPath(path);

} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
private class MyCipherFactory implements fr.maxcom.http.CipherFactory {
Cipher c = null;

@Override
public Cipher getCipher() {
try {
c = Cipher.getInstance("AES/CTR/NoPadding");
c.init(Cipher.DECRYPT_MODE, new SecretKeySpec("1234567890123456".getBytes(), "AES"));

} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}

@Override
public Cipher rebaseCipher(byte[] iv) {
Cipher c = null;
try {
c = Cipher.getInstance("AES/CTR/NoPadding");
c.init(Cipher.DECRYPT_MODE, new SecretKeySpec("1234567890123456".getBytes(),
"AES"), new IvParameterSpec(iv));
} catch (GeneralSecurityException e) {
try {
throw new IOException("Unable to create a cipher", e);
} catch (IOException e1) {
e1.printStackTrace();
}
}
return c;
}
}

نکته خیلی مهم اضافه کردن لایبرری httpClient هستش که توی اندروید استودیو باید داخل build.gradle(app) داخل dependencies عبارت زیر رو وارد کنید. روش اضافه کردن این لایبرری به اکلیپس رو متاسفانه بلد نیستم.

 compile 'cz.msebera.android:httpclient:4.4.1.1'

همچنین اگر فرمت فایلتون توسط اندروید قابل اجرا نیست لایبرری vitamio رو هم اضافه کنید.

موفق باشید

 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .