تنظیم فاصله بین کلمات و حروف در تکست ویو با کاتلین
فاصله space بین کلمات در تکست ویو (TextView)
1397-10-04
ساخت و طراحی پروگرس بار progressBar پیشرفته در اندروید
1397-10-09
پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با کلاس های videoView و MediaController در کاتلین اندروید ، عنوان مطلبی است که قصد داریم در این لحظه از تجاری اپ آن را به شما کاربران و همراهان عزیز آموزش دهیم.در ادامه با ما همراه باشید…

پخش ویدیو با videoView و MediaController در کاتلین اندروید

معرفی کلاس Android VideoView

ساده ترین راه برای نمایش ویدیو در برنامه اندروید استفاده از کلاس videoView است.کلاس videoView یک ویژوال کامپوننت است که به لایوت و اکتیویتی اضافه میشود و قابلیت پخش ویدیو را فراهم میکند.در حال حاضر اندروید از فرمت های ویدیویی زیر پشتیبانی میکن :

  • H.263
  • H.264 AVC
  • H.265 HEVC
  • MPEG-4 SP
  • VP8
  • VP9

کلاس videoView برای مدیریت پخش یک ویدیو دارای متدهای زیر می باشد که به شرح هر کدام میپردازیم.

  • setVideoPath(String path) :  این متد یک پارامتر از نوع رشته ای دریافت میکند که این پارامتر میتواند یک url باشد یا اینکه آدرس فیلم در حافظه داخلی دستگاه باشد.
  • setVideoUri(Uri uri) : این متد مشابه متد بالا عمل میکند با این تفاوت که یک پارامتر از نوع آبجکت uri دریافت میکند و این پارامتر میتواند یک لینک پخش فیلم از سرور باشد.
  • start() : هنگامی که پخش ویدیو شروع میشود. این متد اجرا میشود.
  • topPlayback() :  هنگامی که پخش ویدیو متوقف می شود این متد اجرا میگردد.
  • pause() :  هنگامی که پخش ویدیو برای مدت کوتاهی متوقف میشود.این متد اجرا می شود.
  • isPlaying() : این متد یک مقدار بولین را برمی گرداند و نشان دهنده این است که آیا ویدیو در حال پخش است یا خیر.
  • setOnPreparedListener(MediaPlayer.OnPreparedListener) : وقتی که ویدیو برای پخش آماده میشود این متد فراخوانی میشود.
  • setOnErrorListener(MediaPlayer.OnErrorListener) : وقتی که یک خطا درهنگام پخش ویدیو رخ میدهد این متد فراخوانی میشود.
  • setOnCompletionListener(MediaPlayer.OnCompletionListener) : وقتی که پخش یک ویدیو به انتها میرسد این متد فراخوانی میشود.
  • getDuration() : این متد مدت زمان فیلم را برمیگرداند.
  • getCurrentPosition() : این متد موقعیت فعلی پخش را به صورت عدد صحیح بر میگرداند.
  • setMediaController(MediaController) : این متد یک نمونه از MediaController به عنوان پارامتر دریافت میکند و کنترل های پخش را برای کاربر نمایش میدهد.

معرفی کلاس Android MediaController

اگر یک پلیر از یک کلاس videoView برای پخش ویدئو به تنهایی استفاده کند.کاربر هیچ کنترلی برای مدیریت پخش تا پایان ویدئو نخواهد داشت. که ما برای حل این مشکل یک نمونه از کلاس MediaController را به کلاس ویدیو ویو متصل میکنیم و با این کار کلاس MediaController مجموعه ای از کنترلر های پخش برای مدیریت ویدئو اعم از دکمه توقف ، دکمه مکث ، دکمه پخش ، دکمه جلو بردن فیلم و دکمه به عقب بردن فیلم را برای کاربر فراهم میکند.

کنترلر ها به صورت خودکار در هنگام پخش از دید کاربر و بر روی ویدئو مخفی میشوند و کاربر برای مدیریت آنها میتواند دوباره آنها رو نمایان کند.

متد های کلیدی کلاس MediaController عبارت اند از :

  • setAnchorView(View view) : این متد مکان نمایش کنترلر ها را روی صفحه مشخص میکند.
  • show() : هنگامی که کنترل ها نمایش داده میشوند فراخوانی میشود.
  • show(int timeout) : این متد مشخص میکند که کنترلر ها چه مدتی از زمان نمایش داده شوند. بر حسب میلی ثانیه.
  • hide() : ابزارهای کنترل را از دید کاربر مخفی میکند.
  • isShowing() : این متد یک مقدار بولین را برمیگرداند و نشان دهنده این است که آیا ابزارهای کنترل  در حال حاضر برای کاربر قابل مشاهده است یا خیر.

ساخت یک نمونه از پلیر پخش فیلم با کاتلین

در ادامه آموزش ما یک پلیر پخش فیلم را در قالب یک مثال کاربردی با استفاده از کلاس های VideoView و MediaController توضیح داده ایم که توانایی پخش فیلم از یک لینک در سرور را دارد.
یک پروژه جدید در اندروید استدیو ایجاد کنید و طبق تصاویر زیر آن را تنظیم نمایید.

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

 

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

 

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

طراحی صفحه VideoPlayer

رابط کاربری برای mainActivity از یک نمونه از کلاس ویدیو ویو تشکیل شده است.

که میتونید برای ویرایش کردن رابط کاربری مسیر زیر را در اندروید استدیو طی کنید

app -> res -> layout -> activity_video_player.xml

سپس روی activity_video_player.xml دو بار کلیک کنید تا حالت دیزاین آن نمایان شود و ویجت TextView پیش فرض را حذف کنید.

از بخش Palette panel به تب ویجت ها رفته و یک نمونه videoView  را روی صفحه طراحی بکشید.

طبق تصویر زیر آن را تنظیم کنید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

 

و کدهای xml را به صورت زیر تغییر دهید :

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.ebookfrenzy.videoplayer.VideoPlayerActivity" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="81dp">
<VideoView android:id="@+id/videoView1" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

 

پیکر بندی کلاس VideoView

 

package com. tejariapp.video_player
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_video_player.*
class VideoPlayerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_video_player)
configureVideoView()
}
private fun configureVideoView() {

videoView1.setVideoPath(
"http://www.tejariapp.com/android_book/movie.mp4")
videoView1.start()
}
}

 

کلاس بالا لینک فیلم را دریافت میکند و آن را در ویدئو ویو پخش میکند.

اضافه کردن مجوز اینترنت به برنامه

ما برای دریافت فیلم از سایت و پخش آن در پلیر یا ویدیو ویو نیاز به مجوز دسترسی به اینترنت داریم برای این کار باید به AndroidManifest.xml برویم و دسترسی اینترنت را به آن اضافه کنیم طبق نمونه زیر :

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tejariapp.video_player" >
<uses-permission android:name="android.permission.INTERNET" />
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" >
.
.
.
</manifest>

تا اینجا کار با کلاس VideoView برای پخش فیلم به پایان رسید و شما میتوانید پروژه را در شبیه ساز اندرویدی یا دستگاه اندرویدی خود اجرا کنید. و نتیجه را ببینید.

 

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

 

تا اینجا ما از کلاس videoView استفاده کرده ایم ،در ادامه به چگونگی افزودن ابزارهای کنترل فیلم به پلیر میپردازیم.

اضافه کردن کلاس MediaController به کلاس VideoView

package com.tejariapp.video_player
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.MediaController
import kotlinx.android.synthetic.main.activity_video_player.*
class VideoPlayerActivity : AppCompatActivity() {
private var mediaController: MediaController? = null
.
.

private fun configureVideoView() {
videoView1.setVideoPath(
"http://www.tejariapp.com/android_book/movie.mp4")
mediaController = MediaController(this)
mediaController?.setAnchorView(videoView1)
videoView1.setMediaController(mediaController)
videoView1.start()
}
}

با اعمال تغییرات بالا و اجرا کردن مجدد برنامه در شبیه ساز و با لمس ویدیو پلیر ابزارهای کنترل همانند تصویر زیر ظاهر میشود

پخش ویدیو با videoView و MediaController کاتلین در اندروید

پخش ویدیو با videoView و MediaController کاتلین در اندروید

راه اندازی onPreparedListener

در این متد مدت زمان فیلم و همچنین دانلود و پیکر بندی فیلم را در Android Studio Logcat نمایش میدهیم.

package com.tejariapp.videoplayer
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.MediaController
import android.util.Log
import kotlinx.android.
synthetic.main.activity_video_player.*
class VideoPlayerActivity : AppCompatActivity() {
private var TAG = "VideoPlayer"
.
.
private fun configureVideoView() {
videoView1.setVideoPath(
"http://www.tejariapp.com/android_book/movie.mp4")
mediaController = MediaController(this)
mediaController.setAnchorView(videoView1)
videoView1.setMediaController(mediaController)
videoView1.setOnPreparedListener { mp ->
mp.isLooping = true
Log.i(TAG, "Duration = " + videoView1.duration)
}
videoView1.start()
}
}

و در نهایت پروژه را اجرا میکنیم.
و قبل از شروع پخش فیلم در Android Studio Logcat خروجی زیر را میتوانیم ببینیم.

۱۱-۰۵ ۱۰:۲۷:۵۲٫۲۵۶ ۱۲۵۴۲-۱۲۵۴۲/com. tejariapp.video_player I/VideoPlayer: Duration = ۶۸۷۴

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *