Android搭載デバイス上の動画ベースの広告、など:地下鉄広告画面、マシンのセルフサービス広告は、数マシン広告を取ります。
最後の2日間は、マシンが多数終わり、内部処理ループプレイ動画広告と呼ばれるシステムを作ったので、Cipian概要を持っています
動画広告の特性のいくつかを理解することが第一
まず、ネットワークビデオのキャッシング
第二に、リピート機能
第三に、動的に更新されたビデオ広告
第四に、適時性を保証
まず、ネットワークビデオのキャッシング
すべてのプレーヤーは明らかにもキャッシュする必要があり、それはWIFIケースの下にある場合でも、あまりにも多くのトラフィックを消費し、ネットワークをロードする必要がありません。
ここでは、を通じて、サードパーティ製のフレームワークを使用することができますAndroidVideoCache
図1に示すように、依存関係を追加
implementation 'com.danikula:videocache:2.7.0’
図2に示すように、プロキシ設定を初期化します
public static HttpProxyCacheServer proxy; //視頻緩存代理
//創建视频播放緩存代理
proxy = new HttpProxyCacheServer.Builder(this)
.maxCacheSize(1024 * 1024 * 1024) //1Gb 緩存
.maxCacheFilesCount(5)//最大緩存5個視頻
.build();
第二、モジュロ方法を使用して、ビデオの複数の再帰呼び出しの数に応じた処理ループ
コアコード
public void playVideoOne() {
int urlSize = urlList.size();
index = index % urlSize;
MediaController mediaController = new MediaController(getThis());
//缓存起来这个 url 视频 提供缓存文件的名称默认情况下,AndroidVideoCache使用视频网址的MD5作为文件名
// String proxyUrl = App.proxy.getProxyUrl("[http://jzvd.nathen.cn/63f3f73712544394be981d9e4f56b612/69c5767bb9e54156b5b60a1b6edeb3b5-5287d2089db37e62345123a1be272f8b.mp4](http://jzvd.nathen.cn/63f3f73712544394be981d9e4f56b612/69c5767bb9e54156b5b60a1b6edeb3b5-5287d2089db37e62345123a1be272f8b.mp4)");
String proxyUrl = App.proxy.getProxyUrl(urlList.get(index));
videoView.setMediaController(mediaController);//如果设置Controller 点击时会有可交互模式,暂停快进或快退;不设置的话更适用于广告,不可交互,只进行展示
videoView.setVideoPath(proxyUrl); //為videoview設置播放路徑
videoView.start();
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mPlayer) {
// mPlayer.start();
// //循环播放
// mPlayer.setLooping(true);
index++;
playVideoOne();// 監聽視頻一的播放完成事件,播放完畢就播放視頻二 递归
}
//在播放错误的监听回调中也最好做上面监听内的 操作,并且还要注意 在 onPause() 和 onResume() 回调中处理视频的停止和播放!
});
}
チップ:
図1に示すように、単一のビデオループができる場合
videoView.setOnPreparedListener();
videoView.setOnCompletionListener();
//这两个方法回调中调用 ,均可达到循环播放单一视频的效果,建议写在 onCompletion 之后
mPlayer.start();
//循环播放
mPlayer.setLooping(true);
2、ブロードキャストネットワークアドレスアピ
videoView.setVideoURI(Uri.parse("xxx"));//也可以达到播放网络视频的效果,
因为videoView.setVideoPath 内部调用的就是 videoView.setVideoURI
3、.xmlの使用VideoViewショー
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
図4に示すように、処置VideoViewの異常な再生時間
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
videoView.stopPlayback(); //播放異常,則停止播放,防止彈窗使界面阻塞
return true;
}
});
最後の位置プレーヤーからViewViewポーズと履歴書上の5、
在OnPause你可以得到当前的位置。
stopLength=mVideoView.getCurrentPosition();
mVideoView.pause()
在OnResume()中使用。
mVideoView.seekTo(stopLength);
mVideoView.start()
ViedeView setVisibilityへのセットが非表示になってしまった場合は、最初からプレイを再開します上記の方法を使用します!
シーン:
通知によると、動画が広告ユニットに再生されているリモートサーバーは、ビデオ領域の再生を通知ページのカバーを表示するように切り替わります。
ソリューション:
あなたは下の層の上に重なってレイアウト「でframeLayout」アプローチ、ViedoViewを使用することができ、演奏されています。予告ページを隠すショー上記の動的制御VideoView。直接操作を一時停止し、再開する必要はありませんVieoView。もちろん、あなたも一時停止して、再生処理を再開することができます。私はセットViedeViewの皮に許可されていません覚えています!
図6は、メソッドのジャンプが問題に許可されていません呼び出すseekTo
次いで、完成seekTo()におけるVideoView.startリスナーメソッドを実行します。
// 设置 VideoView 的 OnPrepared 监听,拿到 MediaPlayer 对象。
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//设置 MediaPlayer 的 OnSeekComplete 监听
mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
// seekTo 方法完成时的回调
if(isPause){
videoView.start();
isPause = false;
}
}
});
}
});
参照してくださいhttps://www.jianshu.com/p/f51b2febcfd2を
7、再生処理後のページへのビデオスイッチング再び
/**
* 在onResume()方法控制视频继续播放
*/
@Override
protected void onResume() {
super.onResume();
if (videoView != null) {
videoView.seekTo(videoCurrentPosition);
videoView.start();
}
}
/**
* onPause() 控制视频暂停播放
*/
@Override
protected void onPause() {
super.onPause();
if (videoView != null) {
videoCurrentPosition = videoView.getCurrentPosition();
videoView.pause();
}
}
第三に、動的に更新広告
など、多くの方法があります。
1は、再実行するには、プッシュ要求の受信時間
図2に示すように、リンクアドレスの適時性を確保するためにポーリング要求または指定された日時のタイミングは、決定されてもよい後日抽出処理
第四に、適時性を保証
広告は、定期的に更新する必要があり、我々はどのようにステッチのURLを参照してくださいするために、更新の頻度に関しては、動的キャッシュ・コンテンツのURLからリアルタイムの更新を実現することができます。
一日のアップデートで:
それは日によって広告を更新する場合は、あなたがビデオの後ろに「日付」を追加し、URL、画像になることがあるので、URLは毎日変更、および日中に引っ張ってくるフレームワークをキャッシュことを保証しますが最初にロードされますデータはローカルキャッシュから直接データをロードするためにバックします。そして、前にキャッシュされたコンテンツは、自動的にクリーンアップされます。
期間の更新によって:
それは広告の再生を置き換えるために、一日の異なる時間に応じている場合は、時間のサーバ引っ張るどのような期間で開始する必要があり、その後、現在の時刻との間の期間に、URLにスプライシングまたは終了時間後の期間の初めとすることができます。
日付範囲を更新することにより:
日付がスパンに応じて更新されている場合は、2017年2月3日〜2017年1月1日などには、いくつかのビデオを再生します。実際には、これが唯一の大きなコンセプト、同じトークンを再生するだけの時間で、我々はサーバーで開始し、現在の日付は、ビデオプレーヤー、その後、スプライスまたは終了日がURLの後に開始する期間の間にある照会します。
日付+時刻更新で:
日付範囲上記の包括的なは、日間隔の時間が異なる広告を再生する:スプライシングは、終了日時+期間を終了させます。
ライブアップデート:
あなたは、各プレイヤーが新規であると乱数をスプライスされることを保証します。