[1.0.0]
[视频优先级、视频下载]
This commit is contained in:
@@ -0,0 +1,114 @@
|
|||||||
|
package com.mogo.och.common.module.manager.download
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Environment
|
||||||
|
import com.mogo.commons.AbsMogoApplication
|
||||||
|
import com.mogo.eagle.core.function.call.chat.CallerChatManager
|
||||||
|
import com.mogo.eagle.core.utilcode.download.DownloadUtils
|
||||||
|
import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
|
||||||
|
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope
|
||||||
|
import com.mogo.eagle.core.utilcode.util.StringUtils
|
||||||
|
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||||
|
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||||
|
import com.mogo.och.common.module.manager.loop.BizLoopManager
|
||||||
|
import com.mogo.och.common.module.manager.loop.LoopInfo
|
||||||
|
import com.mogo.och.common.module.utils.FileUtils
|
||||||
|
import com.mogo.och.common.module.wigets.media.MediaFileCacheManager.getCacheFileName
|
||||||
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.SupervisorJob
|
||||||
|
import kotlinx.coroutines.asCoroutineDispatcher
|
||||||
|
import kotlinx.coroutines.channels.Channel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
object DownloadManager {
|
||||||
|
|
||||||
|
private const val TAG = "DownloadManager"
|
||||||
|
|
||||||
|
private val waitDownLoadList = mutableListOf<OchDownLoad>()
|
||||||
|
|
||||||
|
private val context: Context?=AbsMogoApplication.getApp()
|
||||||
|
|
||||||
|
init {
|
||||||
|
BizLoopManager.setLoopFunction(TAG, LoopInfo(5*60, ::go2Download, scheduler = Schedulers.io()))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取本地缓存文件的文件全路径
|
||||||
|
*/
|
||||||
|
private fun getFileCacheDir(): String {
|
||||||
|
// 有些手机需要通过自定义目录
|
||||||
|
val relativePath = "mogo" + File.separator + "media" + File.separator
|
||||||
|
val cacheDir = File(Environment.getExternalStorageDirectory(), relativePath)
|
||||||
|
if (com.mogo.eagle.core.utilcode.util.FileUtils.createOrExistsDir(cacheDir)) {
|
||||||
|
return cacheDir.absolutePath
|
||||||
|
}
|
||||||
|
|
||||||
|
return FileUtils.getCacheDirectory(context, "") + relativePath
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun downloadVideoFile(mediaUrl: String, listener: IDownloadListener?) {
|
||||||
|
val downloadUrl = mediaUrl
|
||||||
|
val downloadDir = getFileCacheDir()
|
||||||
|
val downloadFileName = getCacheFileName(mediaUrl)
|
||||||
|
|
||||||
|
waitDownLoadList.add(OchDownLoad(downloadUrl,downloadDir,downloadFileName,listener))
|
||||||
|
|
||||||
|
if(waitDownLoadList.size==1){
|
||||||
|
go2Download()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun go2Download(){
|
||||||
|
if(waitDownLoadList.isEmpty()){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val first = waitDownLoadList.first()
|
||||||
|
OchChainLogManager.writechainLogDownload("准备下周","信息:${first}")
|
||||||
|
DownloadUtils.downLoad(
|
||||||
|
context,
|
||||||
|
first.downloadUrl,
|
||||||
|
first.downloadDir,
|
||||||
|
first.downloadFileName,
|
||||||
|
object :IDownloadListener{
|
||||||
|
override fun onStart(url: String) {
|
||||||
|
OchChainLogManager.writechainLogDownload("开始下载","url:${url}")
|
||||||
|
first.listener?.onStart(url)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onProgress(url: String, downloaded: Long, total: Long) {
|
||||||
|
first.listener?.onProgress(url,downloaded,total)
|
||||||
|
OchChainLogManager.writechainLogDownload("下载中","url:${url}_downloaded${downloaded}_total:${total}",upload = false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFinished(url: String, path: String) {
|
||||||
|
first.listener?.onFinished(url,path)
|
||||||
|
OchChainLogManager.writechainLogDownload("下载结束","url:${url}---path:${path}")
|
||||||
|
waitDownLoadList.removeFirst()
|
||||||
|
go2Download()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onError(url: String, error: String?) {
|
||||||
|
first.listener?.onError(url,error)
|
||||||
|
OchChainLogManager.writechainLogDownload("下载错误","url:${url}---error:${error}")
|
||||||
|
if(first.downLoadCount>=5){
|
||||||
|
OchChainLogManager.writechainLogDownload("下载错误5次可终点关注","url:${url}---error:${error}")
|
||||||
|
waitDownLoadList.removeFirst()
|
||||||
|
go2Download()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
first.downLoadCount++
|
||||||
|
go2Download()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.mogo.och.common.module.manager.download
|
||||||
|
|
||||||
|
import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
data class OchDownLoad(val downloadUrl:String, val downloadDir:String, val downloadFileName:String, val listener: IDownloadListener?, var downLoadCount:Int = 0)
|
||||||
@@ -33,10 +33,16 @@ object OchChainLogManager {
|
|||||||
|
|
||||||
// 网络接口
|
// 网络接口
|
||||||
const val EVENT_KEY_INFO_Net = "event_key_och_net"
|
const val EVENT_KEY_INFO_Net = "event_key_och_net"
|
||||||
|
|
||||||
|
// 下载日志
|
||||||
|
const val EVENT_KEY_INFO_Download = "event_key_och_download"
|
||||||
|
|
||||||
// 初始化信息
|
// 初始化信息
|
||||||
const val EVENT_KEY_INFO_INIT = "event_key_och_init"
|
const val EVENT_KEY_INFO_INIT = "event_key_och_init"
|
||||||
|
|
||||||
// 局域网内socket 通讯
|
// 局域网内socket 通讯
|
||||||
const val EVENT_KEY_INFO_SOCKET = "analytics_event_och_track_screen_msg"
|
const val EVENT_KEY_INFO_SOCKET = "analytics_event_och_track_screen_msg"
|
||||||
|
|
||||||
// 局域网内socket 连接状态流转
|
// 局域网内socket 连接状态流转
|
||||||
const val EVENT_KEY_INFO_SOCKET_CONNECT = "analytics_event_och_track_screen_connect"
|
const val EVENT_KEY_INFO_SOCKET_CONNECT = "analytics_event_och_track_screen_connect"
|
||||||
|
|
||||||
@@ -51,19 +57,23 @@ object OchChainLogManager {
|
|||||||
const val EVENT_KEY_INFO_DB = "analytics_event_och_db"
|
const val EVENT_KEY_INFO_DB = "analytics_event_och_db"
|
||||||
|
|
||||||
|
|
||||||
fun writeChainLogDb( title: String, info: String) {
|
fun writeChainLogDb(title: String, info: String) {
|
||||||
writeChainLog(title, info, true, EVENT_KEY_INFO_DB)
|
writeChainLog(title, info, true, EVENT_KEY_INFO_DB)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun writeChainLogNet(mustUpdate: Boolean, title: String, info: String) {
|
fun writeChainLogNet(mustUpdate: Boolean, title: String, info: String) {
|
||||||
if(mustUpdate){
|
if (mustUpdate) {
|
||||||
writeChainLog(title, info, true, EVENT_KEY_INFO_Net)
|
writeChainLog(title, info, true, EVENT_KEY_INFO_Net)
|
||||||
}else {
|
} else {
|
||||||
writeChainLog(title, info, DebugConfig.isDebug(), EVENT_KEY_INFO_Net)
|
writeChainLog(title, info, DebugConfig.isDebug(), EVENT_KEY_INFO_Net)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun writechainLogDownload(title: String, info: String,upload: Boolean=true) {
|
||||||
|
writeChainLog(title, info, upload, EVENT_KEY_INFO_Download)
|
||||||
|
}
|
||||||
|
|
||||||
fun writeChainLogScanner(title: String, changeInfo: String) {
|
fun writeChainLogScanner(title: String, changeInfo: String) {
|
||||||
writeChainLog(title, changeInfo, true, EVENT_KEY_INFO_SCANNER)
|
writeChainLog(title, changeInfo, true, EVENT_KEY_INFO_SCANNER)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.mogo.och.common.module.wigets.media
|
|||||||
data class MediaDataList(val medias: MutableList<MediaItem>)
|
data class MediaDataList(val medias: MutableList<MediaItem>)
|
||||||
|
|
||||||
data class MediaItem(
|
data class MediaItem(
|
||||||
|
var priority:Int,
|
||||||
var fileUrl: String,
|
var fileUrl: String,
|
||||||
var fileType: Int,
|
var fileType: Int,
|
||||||
var coverImageUrl: String,
|
var coverImageUrl: String,
|
||||||
@@ -11,6 +12,14 @@ data class MediaItem(
|
|||||||
companion object {
|
companion object {
|
||||||
const val MEDIA_TYPE_IMAGE = 1
|
const val MEDIA_TYPE_IMAGE = 1
|
||||||
const val MEDIA_TYPE_VIDEO = 2
|
const val MEDIA_TYPE_VIDEO = 2
|
||||||
|
|
||||||
|
const val PriorityConfi = 2
|
||||||
|
const val PriorityAd = 1
|
||||||
|
const val PrioritySite = 0
|
||||||
|
|
||||||
|
// 站点优先级 0
|
||||||
|
// 广告优先级 1
|
||||||
|
// 本地配置是 2
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isImageType(): Boolean {
|
fun isImageType(): Boolean {
|
||||||
@@ -20,4 +29,6 @@ data class MediaItem(
|
|||||||
fun isVideoType(): Boolean {
|
fun isVideoType(): Boolean {
|
||||||
return this.fileType == MEDIA_TYPE_VIDEO
|
return this.fileType == MEDIA_TYPE_VIDEO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import com.mogo.och.common.module.constant.OchCommonConst
|
|||||||
import com.mogo.och.common.module.network.OchCommonServiceCallback
|
import com.mogo.och.common.module.network.OchCommonServiceCallback
|
||||||
import com.mogo.och.common.module.network.OchCommonSubscribeImpl
|
import com.mogo.och.common.module.network.OchCommonSubscribeImpl
|
||||||
import com.mogo.och.common.module.network.interceptor.transformTry
|
import com.mogo.och.common.module.network.interceptor.transformTry
|
||||||
|
import com.mogo.och.common.module.utils.ProjectUtils
|
||||||
import com.mogo.och.common.module.wigets.media.MediaItem.Companion.MEDIA_TYPE_IMAGE
|
import com.mogo.och.common.module.wigets.media.MediaItem.Companion.MEDIA_TYPE_IMAGE
|
||||||
import com.mogo.och.common.module.wigets.media.MediaItem.Companion.MEDIA_TYPE_VIDEO
|
import com.mogo.och.common.module.wigets.media.MediaItem.Companion.MEDIA_TYPE_VIDEO
|
||||||
import io.reactivex.Observable
|
import io.reactivex.Observable
|
||||||
@@ -73,9 +74,8 @@ object MediaDataSourceManager {
|
|||||||
if (!mMediaDataSourceListenerMap.containsKey(tag)) {
|
if (!mMediaDataSourceListenerMap.containsKey(tag)) {
|
||||||
mMediaDataSourceListenerMap[tag] = dataSourceListener
|
mMediaDataSourceListenerMap[tag] = dataSourceListener
|
||||||
}
|
}
|
||||||
val isSassProject = isSassProject()
|
MediaPlayLogger.printInfoLog("init, 初始化环境 isSassProject=${ProjectUtils.isSaas()}")
|
||||||
MediaPlayLogger.printInfoLog("init, 初始化环境 isSassProject=$isSassProject")
|
if (ProjectUtils.isSaas()) {
|
||||||
if (isSassProject) {
|
|
||||||
mNetworkService = MoGoRetrofitFactory.getInstance(OchCommonConst.getEagleMisUrl()).create(IMediaNetworkApi::class.java)
|
mNetworkService = MoGoRetrofitFactory.getInstance(OchCommonConst.getEagleMisUrl()).create(IMediaNetworkApi::class.java)
|
||||||
MediaPlayLogger.printInfoLog("init, 开始检查后台配置数据")
|
MediaPlayLogger.printInfoLog("init, 开始检查后台配置数据")
|
||||||
startGetMediaDataSourceLoop()
|
startGetMediaDataSourceLoop()
|
||||||
@@ -265,6 +265,7 @@ data class MediaDataResp(val data: List<MediaData>) : BaseData() {
|
|||||||
val rotationItemList = mutableListOf<MediaItem>()
|
val rotationItemList = mutableListOf<MediaItem>()
|
||||||
mediaDataList?.forEach {
|
mediaDataList?.forEach {
|
||||||
val rotationItem = MediaItem(
|
val rotationItem = MediaItem(
|
||||||
|
priority = MediaItem.PriorityAd,
|
||||||
fileUrl = if (TextUtils.isEmpty(it.file_path)) "" else "${it.file_path}",
|
fileUrl = if (TextUtils.isEmpty(it.file_path)) "" else "${it.file_path}",
|
||||||
fileType = if (it.file_type == 1) MEDIA_TYPE_VIDEO else MEDIA_TYPE_IMAGE,
|
fileType = if (it.file_type == 1) MEDIA_TYPE_VIDEO else MEDIA_TYPE_IMAGE,
|
||||||
coverImageUrl = if (TextUtils.isEmpty(it.cover_path)) "" else "${it.cover_path}",
|
coverImageUrl = if (TextUtils.isEmpty(it.cover_path)) "" else "${it.cover_path}",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import android.util.Log
|
|||||||
import com.mogo.eagle.core.utilcode.download.DownloadUtils
|
import com.mogo.eagle.core.utilcode.download.DownloadUtils
|
||||||
import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
|
import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
|
||||||
import com.mogo.eagle.core.utilcode.util.EncryptUtils
|
import com.mogo.eagle.core.utilcode.util.EncryptUtils
|
||||||
|
import com.mogo.och.common.module.manager.download.DownloadManager
|
||||||
import com.mogo.och.common.module.utils.FileUtils
|
import com.mogo.och.common.module.utils.FileUtils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@ object MediaFileCacheManager {
|
|||||||
* 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响
|
* 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响
|
||||||
*/
|
*/
|
||||||
fun getCacheFileFullPathByUrl(context: Context, mediaUrl: String): String {
|
fun getCacheFileFullPathByUrl(context: Context, mediaUrl: String): String {
|
||||||
return getFileCacheDir(context) + getCacheFileName(mediaUrl)
|
return getFileCacheDir(context) +File.separator +getCacheFileName(mediaUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,22 +68,14 @@ object MediaFileCacheManager {
|
|||||||
fun isLocalCacheFileExists(context: Context, mediaUrl: String): Boolean {
|
fun isLocalCacheFileExists(context: Context, mediaUrl: String): Boolean {
|
||||||
val localVideoCacheFilePath =
|
val localVideoCacheFilePath =
|
||||||
getCacheFileFullPathByUrl(context, mediaUrl)
|
getCacheFileFullPathByUrl(context, mediaUrl)
|
||||||
|
Log.e(TAG, "文件是否存在,mediaUrl=$mediaUrl------本地文件:${localVideoCacheFilePath}")
|
||||||
return com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoCacheFilePath)
|
return com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(localVideoCacheFilePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载文件
|
* 下载文件
|
||||||
*/
|
*/
|
||||||
fun downloadFile(context: Context, mediaUrl: String, listener: IDownloadListener) {
|
fun downloadFile(mediaUrl: String, listener: IDownloadListener) {
|
||||||
val downloadUrl = mediaUrl
|
DownloadManager.downloadVideoFile(mediaUrl,listener)
|
||||||
val downloadDir = getFileCacheDir(context)
|
|
||||||
val downloadFileName = getCacheFileName(mediaUrl)
|
|
||||||
DownloadUtils.downLoad(
|
|
||||||
context,
|
|
||||||
downloadUrl,
|
|
||||||
downloadDir,
|
|
||||||
downloadFileName,
|
|
||||||
listener
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,10 @@ class MediaLoopPlayView @JvmOverloads constructor(
|
|||||||
pagerAdapter?.setNewMediaData(list)
|
pagerAdapter?.setNewMediaData(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setsetHightPriorityMediaItem(list: MutableList<MediaItem>){
|
||||||
|
pagerAdapter?.setSiteInfortion(list)
|
||||||
|
}
|
||||||
|
|
||||||
fun setPause() {
|
fun setPause() {
|
||||||
pagerAdapter?.setPause()
|
pagerAdapter?.setPause()
|
||||||
}
|
}
|
||||||
@@ -81,6 +85,8 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter
|
|||||||
//新的数据,在轮播下一次切换的时机完成整体数据的更新
|
//新的数据,在轮播下一次切换的时机完成整体数据的更新
|
||||||
private val mNewDataList: MutableList<MediaItem> = mutableListOf()
|
private val mNewDataList: MutableList<MediaItem> = mutableListOf()
|
||||||
|
|
||||||
|
private var hightPriorityMediaItem: MutableList<MediaItem> = mutableListOf()
|
||||||
|
|
||||||
private var mLastViewPagerPosition = -1
|
private var mLastViewPagerPosition = -1
|
||||||
private var mImageCountDownTimer: CountDownTimer? = null
|
private var mImageCountDownTimer: CountDownTimer? = null
|
||||||
|
|
||||||
@@ -111,6 +117,14 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter
|
|||||||
mNewDataList.addAll(list)
|
mNewDataList.addAll(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setSiteInfortion(list: MutableList<MediaItem>){
|
||||||
|
hightPriorityMediaItem = list
|
||||||
|
if(list.isEmpty()){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
startPlayHightPriorityMediaItem(false)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getCount(): Int {
|
override fun getCount(): Int {
|
||||||
return mDataList.size
|
return mDataList.size
|
||||||
}
|
}
|
||||||
@@ -144,7 +158,7 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter
|
|||||||
mItemViewList.add(imageView)
|
mItemViewList.add(imageView)
|
||||||
} else if (item.isVideoType()) {
|
} else if (item.isVideoType()) {
|
||||||
val videoView = AdvanceVideoView(mContext)
|
val videoView = AdvanceVideoView(mContext)
|
||||||
videoView.initVideoUrlData(item.fileUrl, item.coverImageUrl)
|
videoView.initVideoUrlData(item.fileUrl, item.coverImageUrl,item.priority)
|
||||||
mItemViewList.add(videoView)
|
mItemViewList.add(videoView)
|
||||||
} else {
|
} else {
|
||||||
MediaPlayLogger.printErrorLog( "addItemView 不支持的文件类型:${item.fileType}")
|
MediaPlayLogger.printErrorLog( "addItemView 不支持的文件类型:${item.fileType}")
|
||||||
@@ -174,6 +188,96 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun startPlayHightPriorityMediaItem(isOnVideoError:Boolean){
|
||||||
|
val currentPosition = mViewPager.currentItem
|
||||||
|
if(mItemViewList.isEmpty()){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(hightPriorityMediaItem.size<1){
|
||||||
|
val currentMediaItem = mDataList[currentPosition]
|
||||||
|
// 恢复数据 重新播放
|
||||||
|
when (val itemView = mItemViewList[currentPosition]) {
|
||||||
|
is AdvanceVideoView -> {
|
||||||
|
itemView.onVideoReset()
|
||||||
|
if (isOnVideoError) {
|
||||||
|
// 删除上一个缓存的视频
|
||||||
|
itemView.clearLocalErrorVideo()
|
||||||
|
}
|
||||||
|
itemView.initVideoUrlData(currentMediaItem.fileUrl,currentMediaItem.coverImageUrl,currentMediaItem.priority)
|
||||||
|
itemView.setThumbImageViewVisible()
|
||||||
|
itemView.startPlayVideo(hightPriorityVideoPlayLifecycleCallBack)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 播放完高优视频
|
||||||
|
startLoopPlay()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val currentMediaItem = hightPriorityMediaItem.first()
|
||||||
|
when (val itemView = mItemViewList[currentPosition]) {
|
||||||
|
// 当前正在播放视频
|
||||||
|
is AdvanceVideoView -> {
|
||||||
|
MediaPlayLogger.printInfoLog("startPlayHightPriorityMediaItem: AdvanceVideoView, url=${currentMediaItem.fileUrl}")
|
||||||
|
itemView.onVideoReset()
|
||||||
|
if (isOnVideoError) {
|
||||||
|
// 删除上一个缓存的视频
|
||||||
|
itemView.clearLocalErrorVideo()
|
||||||
|
}
|
||||||
|
itemView.initVideoUrlData(currentMediaItem.fileUrl,currentMediaItem.coverImageUrl,currentMediaItem.priority)
|
||||||
|
itemView.setThumbImageViewVisible()
|
||||||
|
itemView.startPlayVideo(hightPriorityVideoPlayLifecycleCallBack)
|
||||||
|
hightPriorityMediaItem.removeFirst()
|
||||||
|
}
|
||||||
|
// 当前正在播放图片
|
||||||
|
is AdvanceImageView -> {
|
||||||
|
// 正在播放图片
|
||||||
|
MediaPlayLogger.printInfoLog("startPlayHightPriorityMediaItem: AdvanceImageView, url=${currentMediaItem.fileUrl}")
|
||||||
|
// 停止倒计时
|
||||||
|
cancelImageCountDownTimer()
|
||||||
|
// 寻找 视频Item
|
||||||
|
mDataList.forEachIndexed { index, mediaItem ->
|
||||||
|
// 广告中有视频播放器
|
||||||
|
if(mediaItem.fileType==MediaItem.MEDIA_TYPE_VIDEO){
|
||||||
|
if (currentPosition == mItemViewList.size - 1) {
|
||||||
|
//已经到最后一个, 从头开始
|
||||||
|
mViewPager.post {
|
||||||
|
mViewPager.setCurrentItem(0, true)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mViewPager.post {
|
||||||
|
mViewPager.setCurrentItem(mViewPager.currentItem + 1, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 当前播放列表中没有视频
|
||||||
|
// TODO: 创建临时view去播放视频
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
MediaPlayLogger.printErrorLog("startLoopPlay 不支持的文件类型:${currentMediaItem.fileType}, url=${currentMediaItem.fileUrl}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var hightPriorityVideoPlayLifecycleCallBack = object : GSYSampleCallBack() {
|
||||||
|
|
||||||
|
override fun onPrepared(url: String?, vararg objects: Any?) {
|
||||||
|
CallerLogger.d(MediaLoopPlayView.TAG, "onPrepared")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAutoComplete(url: String?, vararg objects: Any?) {
|
||||||
|
CallerLogger.d(MediaLoopPlayView.TAG, "onAutoComplete")
|
||||||
|
startPlayHightPriorityMediaItem(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPlayError(url: String?, vararg objects: Any?) {
|
||||||
|
super.onPlayError(url, *objects)
|
||||||
|
CallerLogger.d(MediaLoopPlayView.TAG, "onPlayError, error=${objects}")
|
||||||
|
startPlayHightPriorityMediaItem(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var videoPlayLifecycleCallBack = object : GSYSampleCallBack() {
|
private var videoPlayLifecycleCallBack = object : GSYSampleCallBack() {
|
||||||
|
|
||||||
override fun onPrepared(url: String?, vararg objects: Any?) {
|
override fun onPrepared(url: String?, vararg objects: Any?) {
|
||||||
@@ -303,7 +407,11 @@ class AdvancePagerAdapter(context: Context, viewPager: ViewPager) : PagerAdapter
|
|||||||
"onPageScrollStateChanged, state = $state, currentItem = $currentPosition, lastPosition = $mLastViewPagerPosition"
|
"onPageScrollStateChanged, state = $state, currentItem = $currentPosition, lastPosition = $mLastViewPagerPosition"
|
||||||
)
|
)
|
||||||
if (mItemViewList.size > 1) { //多于1,才会循环跳转
|
if (mItemViewList.size > 1) { //多于1,才会循环跳转
|
||||||
startLoopPlay()
|
if(hightPriorityMediaItem.size>0){
|
||||||
|
startPlayHightPriorityMediaItem(false)
|
||||||
|
}else {
|
||||||
|
startLoopPlay()
|
||||||
|
}
|
||||||
mLastViewPagerPosition = currentPosition
|
mLastViewPagerPosition = currentPosition
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
|||||||
import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider
|
import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider
|
||||||
import com.mogo.och.common.module.R
|
import com.mogo.och.common.module.R
|
||||||
import com.mogo.och.common.module.wigets.media.MediaFileCacheManager
|
import com.mogo.och.common.module.wigets.media.MediaFileCacheManager
|
||||||
|
import com.mogo.och.common.module.wigets.media.MediaItem
|
||||||
import com.mogo.och.common.module.wigets.media.MediaLoopPlayView
|
import com.mogo.och.common.module.wigets.media.MediaLoopPlayView
|
||||||
import com.mogo.och.common.module.wigets.media.MediaPlayLogger
|
import com.mogo.och.common.module.wigets.media.MediaPlayLogger
|
||||||
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
|
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
|
||||||
@@ -37,6 +38,7 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
|
|
||||||
private var thumbnailImageUrl: String = ""
|
private var thumbnailImageUrl: String = ""
|
||||||
private var videoUrl: String = ""
|
private var videoUrl: String = ""
|
||||||
|
private var priority:Int = MediaItem.PrioritySite
|
||||||
|
|
||||||
private val downListener = object : IDownloadListener {
|
private val downListener = object : IDownloadListener {
|
||||||
override fun onStart(url: String) {
|
override fun onStart(url: String) {
|
||||||
@@ -61,7 +63,9 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
if (url == videoUrl) {
|
if (url == videoUrl) {
|
||||||
//下载完成
|
//下载完成
|
||||||
ThreadUtils.runOnUiThread {
|
ThreadUtils.runOnUiThread {
|
||||||
startPlay(Uri.fromFile(File(path)).toString())
|
if(priority!=MediaItem.PrioritySite) {
|
||||||
|
startPlay(Uri.fromFile(File(path)).toString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
MediaPlayLogger.printInfoLog("download finished, 开始播放,downloadUrl=${videoUrl}")
|
MediaPlayLogger.printInfoLog("download finished, 开始播放,downloadUrl=${videoUrl}")
|
||||||
} else {//如果当前文件不存在再次去下载当前的
|
} else {//如果当前文件不存在再次去下载当前的
|
||||||
@@ -72,7 +76,9 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
if (FileUtils.isFileExists(path)) {
|
if (FileUtils.isFileExists(path)) {
|
||||||
Logger.d(MediaLoopPlayView.TAG, "video play download, had download, startPlay")
|
Logger.d(MediaLoopPlayView.TAG, "video play download, had download, startPlay")
|
||||||
ThreadUtils.runOnUiThread {
|
ThreadUtils.runOnUiThread {
|
||||||
startPlay(Uri.fromFile(File(path)).toString())
|
if(priority!=MediaItem.PrioritySite) {
|
||||||
|
startPlay(Uri.fromFile(File(path)).toString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
MediaPlayLogger.printInfoLog("download finished, 开始播放,downloadUrl=${videoUrl}")
|
MediaPlayLogger.printInfoLog("download finished, 开始播放,downloadUrl=${videoUrl}")
|
||||||
} else {
|
} else {
|
||||||
@@ -119,11 +125,12 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
/**
|
/**
|
||||||
* 初始化数据
|
* 初始化数据
|
||||||
*/
|
*/
|
||||||
fun initVideoUrlData(videoUrl: String, thumbnailImageUrl: String) {
|
fun initVideoUrlData(videoUrl: String, thumbnailImageUrl: String,priority:Int) {
|
||||||
// https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v
|
// https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v
|
||||||
// https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4
|
// https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4
|
||||||
this.videoUrl = videoUrl
|
this.videoUrl = videoUrl
|
||||||
this.thumbnailImageUrl = thumbnailImageUrl
|
this.thumbnailImageUrl = thumbnailImageUrl
|
||||||
|
this.priority = priority
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,6 +139,19 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
fun startPlayVideo(onCompletionListener: GSYSampleCallBack) {
|
fun startPlayVideo(onCompletionListener: GSYSampleCallBack) {
|
||||||
//首先根据url检查video是否有已经下载完的本地视频文件
|
//首先根据url检查video是否有已经下载完的本地视频文件
|
||||||
gsyVideoPlayerLifecycleCallback = onCompletionListener
|
gsyVideoPlayerLifecycleCallback = onCompletionListener
|
||||||
|
videoPlayerView?.thumbImageView = thumbnailImageView
|
||||||
|
thumbnailImageView?.setImageResource(R.drawable.video_holder)
|
||||||
|
thumbnailImageView?.also {
|
||||||
|
Glide.with(context).asBitmap().load(thumbnailImageUrl)
|
||||||
|
.apply(
|
||||||
|
RequestOptions().useUnlimitedSourceGeneratorsPool(true)
|
||||||
|
.placeholder(R.drawable.video_holder)
|
||||||
|
.error(R.drawable.video_holder)
|
||||||
|
.fallback(R.drawable.video_holder)
|
||||||
|
.centerCrop()
|
||||||
|
)
|
||||||
|
.into(it)
|
||||||
|
}
|
||||||
if (MediaFileCacheManager.isLocalCacheFileExists(context, this.videoUrl)) {
|
if (MediaFileCacheManager.isLocalCacheFileExists(context, this.videoUrl)) {
|
||||||
val localVideoCacheFilePath = MediaFileCacheManager.getCacheFileFullPathByUrl(
|
val localVideoCacheFilePath = MediaFileCacheManager.getCacheFileFullPathByUrl(
|
||||||
context, this.videoUrl
|
context, this.videoUrl
|
||||||
@@ -144,19 +164,6 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
MediaLoopPlayView.TAG, "播放视频,videoUri=$realUri"
|
MediaLoopPlayView.TAG, "播放视频,videoUri=$realUri"
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
thumbnailImageView?.setImageResource(R.drawable.video_holder)
|
|
||||||
videoPlayerView?.thumbImageView = thumbnailImageView
|
|
||||||
thumbnailImageView?.also {
|
|
||||||
Glide.with(context).asBitmap().load(thumbnailImageUrl)
|
|
||||||
.apply(
|
|
||||||
RequestOptions().useUnlimitedSourceGeneratorsPool(true)
|
|
||||||
.placeholder(R.drawable.video_holder)
|
|
||||||
.error(R.drawable.video_holder)
|
|
||||||
.fallback(R.drawable.video_holder)
|
|
||||||
.centerCrop()
|
|
||||||
)
|
|
||||||
.into(it)
|
|
||||||
}
|
|
||||||
setThumbImageViewVisible()
|
setThumbImageViewVisible()
|
||||||
|
|
||||||
startDownLoadVideoFile()
|
startDownLoadVideoFile()
|
||||||
@@ -179,11 +186,7 @@ class AdvanceVideoView @JvmOverloads constructor(
|
|||||||
private fun startDownLoadVideoFile() {
|
private fun startDownLoadVideoFile() {
|
||||||
//下载视频,下载成功后再播放
|
//下载视频,下载成功后再播放
|
||||||
MediaPlayLogger.printInfoLog( "startDownLoadVideoFile, downloadUrl=${this.videoUrl}")
|
MediaPlayLogger.printInfoLog( "startDownLoadVideoFile, downloadUrl=${this.videoUrl}")
|
||||||
MediaFileCacheManager.downloadFile(
|
MediaFileCacheManager.downloadFile(videoUrl, downListener)
|
||||||
context,
|
|
||||||
videoUrl,
|
|
||||||
downListener
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clearLocalErrorVideo() {
|
fun clearLocalErrorVideo() {
|
||||||
|
|||||||
@@ -3,11 +3,18 @@ package com.mogo.och.common.module.wigets.media
|
|||||||
import com.mogo.commons.mvp.MvpFragment
|
import com.mogo.commons.mvp.MvpFragment
|
||||||
import com.mogo.commons.mvp.Presenter
|
import com.mogo.commons.mvp.Presenter
|
||||||
import com.mogo.eagle.core.function.main.MainMoGoApplication
|
import com.mogo.eagle.core.function.main.MainMoGoApplication
|
||||||
|
import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
|
||||||
|
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||||
|
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
|
||||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||||
|
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||||
import com.mogo.och.common.module.R
|
import com.mogo.och.common.module.R
|
||||||
|
import com.mogo.och.common.module.manager.download.DownloadManager
|
||||||
|
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||||
import com.shuyu.gsyvideoplayer.GSYVideoManager
|
import com.shuyu.gsyvideoplayer.GSYVideoManager
|
||||||
|
import kotlinx.android.synthetic.main.fragment_video_player.acb_add_site_video
|
||||||
import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationView
|
import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationView
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,6 +43,12 @@ class MediaPlayerFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun initViews() {
|
override fun initViews() {
|
||||||
|
acb_add_site_video.onClick {
|
||||||
|
val siteList = mutableListOf<MediaItem>()
|
||||||
|
siteList.add(MediaItem(MediaItem.PrioritySite,"https://img.zhidaozhixing.com/fileServer/defaultPath/b47f361c3de6ea490f3086407fc0376f/a1%E8%B7%AF%E7%BA%BF%281%29.mp4",MediaItem.MEDIA_TYPE_VIDEO,"","title"))
|
||||||
|
siteList.add(MediaItem(MediaItem.PrioritySite,"https://img.zhidaozhixing.com/fileServer/defaultPath/a6376a452df030ee97770688f6fea4c0/a2%E8%B7%AF%E7%BA%BF.mp4",MediaItem.MEDIA_TYPE_VIDEO,"","title"))
|
||||||
|
setHightPriorityMediaItem(siteList)
|
||||||
|
}
|
||||||
MediaFileCacheManager.createFileCacheDir(MainMoGoApplication.getApp().applicationContext)
|
MediaFileCacheManager.createFileCacheDir(MainMoGoApplication.getApp().applicationContext)
|
||||||
MediaDataSourceManager.init(TAG, object : IMediaDataSourceListener {
|
MediaDataSourceManager.init(TAG, object : IMediaDataSourceListener {
|
||||||
override fun onMediaDataSourceChanged(list: List<MediaItem>) {
|
override fun onMediaDataSourceChanged(list: List<MediaItem>) {
|
||||||
@@ -56,6 +69,20 @@ class MediaPlayerFragment :
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setHightPriorityMediaItem(list: MutableList<MediaItem>){
|
||||||
|
context?.let {context->
|
||||||
|
val cacheList = list.filter {
|
||||||
|
DownloadManager.downloadVideoFile(it.fileUrl,null)
|
||||||
|
MediaFileCacheManager.isLocalCacheFileExists(context,it.fileUrl)
|
||||||
|
}
|
||||||
|
ThreadUtils.runOnUiThread {
|
||||||
|
imageVideoRotationView.setsetHightPriorityMediaItem(cacheList.toMutableList())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
imageVideoRotationView.setPause()
|
imageVideoRotationView.setPause()
|
||||||
|
|||||||
@@ -1,10 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<!-- 图片或视频广告-->
|
<!-- 图片或视频广告-->
|
||||||
<com.mogo.och.common.module.wigets.media.MediaLoopPlayView
|
<com.mogo.och.common.module.wigets.media.MediaLoopPlayView
|
||||||
android:id="@+id/imageVideoRotationView"
|
android:id="@+id/imageVideoRotationView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatButton
|
||||||
|
android:id="@+id/acb_add_site_video"
|
||||||
|
android:text="添加视频"
|
||||||
|
android:gravity="center"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
android:layout_width="@dimen/dp_100"
|
||||||
|
android:layout_height="@dimen/dp_30"/>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -6,60 +6,70 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "3"
|
"title": "3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "4"
|
"title": "4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "5"
|
"title": "5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "6"
|
"title": "6"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "7"
|
"title": "7"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "8"
|
"title": "8"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "9"
|
"title": "9"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "10"
|
"title": "10"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -70,12 +80,14 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -86,24 +98,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -114,24 +130,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -150,24 +170,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "3"
|
"title": "3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "4"
|
"title": "4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -180,36 +204,42 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "5"
|
"title": "5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "6"
|
"title": "6"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "7"
|
"title": "7"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "8"
|
"title": "8"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "9"
|
"title": "9"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "10"
|
"title": "10"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -220,12 +250,14 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -236,24 +268,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -264,24 +300,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -294,12 +334,14 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1680774790614/yangmadao_photo.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1680774790614/yangmadao_photo.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681210971943/yangmadou.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1680774790614/yangmadao_photo.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1680774790614/yangmadao_photo.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -310,12 +352,14 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -326,24 +370,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -354,24 +402,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -384,10 +436,12 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357256102/1.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
||||||
|
"priority": 2,
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
"title": "2"
|
"title": "2"
|
||||||
@@ -396,48 +450,56 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357557335/3.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357382357/2.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "3"
|
"title": "3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "4"
|
"title": "4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357834634/5.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "5"
|
"title": "5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676358660379/6.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676357598483/4.jpg",
|
||||||
|
"priority": 2,
|
||||||
"title": "6"
|
"title": "6"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360154589/7.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "7"
|
"title": "7"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360185500/8.jpg",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "8"
|
"title": "8"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
||||||
"fileType": 1,
|
"fileType": 1,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "9"
|
"title": "9"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360274126/10.mp4",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1676360224773/9.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "10"
|
"title": "10"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -448,12 +510,14 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "1"
|
"title": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1681716116231/6923474a99a1983c9a0410ad3357888d.mov",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "",
|
"coverImageUrl": "",
|
||||||
|
"priority": 2,
|
||||||
"title": "2"
|
"title": "2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -464,24 +528,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -492,24 +560,28 @@
|
|||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联牵手成都大运会"
|
"title": "蘑菇车联牵手成都大运会"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969511280/车队.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联覆盖生活的方方面面"
|
"title": "蘑菇车联覆盖生活的方方面面"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "蘑菇车联之红旗车队"
|
"title": "蘑菇车联之红旗车队"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
"fileUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
|
||||||
"fileType": 2,
|
"fileType": 2,
|
||||||
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
"coverImageUrl": "https://img.zhidaozhixing.com/fileServer/online_car_hailing/1655969579713/三屏.png",
|
||||||
|
"priority": 2,
|
||||||
"title": "多视角体验蘑菇车联自动驾驶"
|
"title": "多视角体验蘑菇车联自动驾驶"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user